🧠 Explicação
EXISTS e NOT EXISTS são usados em subconsultas para verificar se existe ou não pelo menos uma linha que satisfaça uma condição. Diferente do IN, eles não se importam com o valor retornado, e sim com a existência de linhas.
-
EXISTSretorna TRUE se a subconsulta trouxer pelo menos um resultado. -
NOT EXISTSretorna TRUE se a subconsulta não trouxer nenhum resultado.
É excelente pra testar relacionamentos entre tabelas e evita problemas de performance ou NULL que podem ocorrer com o IN.
🔧 Usos mais comuns
-
Verificar se um cliente tem pedidos antes de exibi-lo.
-
Filtrar registros apenas se houver correspondência em outra tabela.
-
Controlar relacionamentos pai-filho com eficiência.
🧾 Sintaxe
SELECT coluna1 FROM tabelaA
WHERE EXISTS (
SELECT 1 FROM tabelaB
WHERE tabelaB.chave = tabelaA.chave
);
-- ou
SELECT coluna1 FROM tabelaA
WHERE NOT EXISTS (
SELECT 1 FROM tabelaB
WHERE tabelaB.chave = tabelaA.chave
);