Parece-me que você pode fazer a mesma coisa em uma consulta SQL usando NOT EXISTS, NOT IN ou LEFT JOIN WHERE IS NULL. Por exemplo:
SELECT a FROM table1 WHERE a NOT IN (SELECT a FROM table2)
SELECT a FROM table1 WHERE NOT EXISTS (SELECT * FROM table2 WHERE table1.a = table2.a)
SELECT a FROM table1 LEFT JOIN table2 ON table1.a = table2.a WHERE table1.a IS NULL
Não tenho certeza se tenho toda a sintaxe correta, mas estas são as técnicas gerais que já vi. Por que eu escolheria usar um sobre o outro? O desempenho difere ...? Qual destes é o mais rápido / mais eficiente? (Se depender da implementação, quando eu usaria cada um?)
EXISTS
cláusula. Você pode retornar *
, NULL
ou o que for: tudo isso será otimizado.
SELECT
e FROM
. E *
é apenas mais fácil digitar. Sim, SQL
tem alguma semelhança com uma linguagem natural, mas é analisada e executada por uma máquina, uma máquina programada. Não é que ele de repente entre no seu cubículo e grite "pare de exigir os campos extras em uma EXISTS
consulta, porque eu estou cansado de analisá-los e depois jogá-los fora!". Está tudo bem com um computador, realmente.