EXISTS e NOT EXISTS

Teste se uma subconsulta encontra alguma linha. EXISTS é verdadeiro quando encontra; NOT EXISTS é verdadeiro quando não encontra nenhuma.

Sintaxe

WHERE EXISTS (SELECT 1 FROM table WHERE …);
WHERE NOT EXISTS (SELECT 1 FROM table WHERE …);
  • SELECT 1 basta: EXISTS só verifica se uma linha é retornada.

Exemplo

SELECT first_name FROM customers AS c WHERE EXISTS (SELECT 1 FROM orders AS o WHERE o.customer_id = c.customer_id);

Clientes que fizeram pelo menos um pedido.

Tabelas usadas: customers, orders. Experimente em uma lição abaixo.

Erros comuns

  • Use NOT EXISTS, e não NOT IN, quando a subconsulta puder retornar NULL: um único NULL faz NOT IN não retornar nenhuma linha.

Pratique