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.