🧠 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
);

💻 Exemplo prático

Mostrar clientes que fizeram pedidos:

SELECT nome FROM clientes C
WHERE EXISTS (
   SELECT 1 FROM pedidos P
   WHERE P.id_cliente = C.id_cliente
);

Mostrar clientes que nunca fizeram pedidos:

SELECT nome FROM clientes C
WHERE NOT EXISTS (
   SELECT 1 FROM pedidos P
   WHERE P.id_cliente = C.id_cliente
);

📌 Regras

  • A subconsulta deve estar correlacionada (referenciar a tabela externa).

  • O SELECT 1 é uma convenção — pode ser qualquer valor, pois ele não é retornado, só avaliado.

  • Pode ser usada em WHERE, HAVING, CASE e até em JOIN.

💡 Dicas

  • EXISTS costuma ser mais performático que IN, especialmente com tabelas grandes.

  • Use NOT EXISTS com cuidado: evite subconsultas que retornem NULL — pode causar confusão.

  • Ideal pra quando você não precisa saber o valor, apenas se há ou não registros.

 

✅ Conclusão

EXISTS e NOT EXISTS são ferramentas precisas para subconsultas inteligentes e performáticas. Se você só quer saber se existe ou não existe um relacionamento — esse é o caminho. Mais seguro e eficiente do que o IN na maioria dos casos.