🧠 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.
-
EXISTS
retorna TRUE se a subconsulta trouxer pelo menos um resultado. -
NOT EXISTS
retorna 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
);