Not IN ou Not EXISTS qual usar?

A escolha entre usar “NOT IN” ou “NOT EXISTS” em uma consulta SQL depende do contexto e do resultado desejado. Ambas as condições são usadas para excluir valores de uma consulta com base em uma condição específica.

A cláusula “NOT IN” é usada para excluir valores de uma consulta com base em uma lista de valores especificados. Por exemplo, se você tiver uma tabela de funcionários e quiser excluir aqueles que não estão em um determinado departamento, você pode usar a cláusula “NOT IN”. Aqui está um exemplo:

SELECT *
FROM funcionarios
WHERE departamento_id NOT IN (1, 2, 3);

No exemplo acima, a consulta retornará todos os funcionários que não estão nos departamentos 1, 2 ou 3.

Por outro lado, a cláusula “NOT EXISTS” é usada para excluir valores de uma consulta com base em uma subconsulta. Por exemplo, se você tiver uma tabela de pedidos e quiser excluir aqueles que não têm nenhum item associado a eles, você pode usar a cláusula “NOT EXISTS”. Aqui está um exemplo:

SELECT *
FROM pedidos p
WHERE NOT EXISTS (
  SELECT 1
  FROM itens_pedido ip
  WHERE ip.pedido_id = p.id
);

No exemplo acima, a consulta retornará todos os pedidos que não têm nenhum item associado a eles.

Em geral, a escolha entre “NOT IN” e “NOT EXISTS” pode depender do desempenho da consulta, do tamanho dos conjuntos de dados e da estrutura do banco de dados. Em alguns casos, uma opção pode ser mais eficiente do que a outra. É sempre recomendável testar e avaliar o desempenho da consulta em diferentes cenários para tomar a melhor decisão.