Il me semble que vous pouvez faire la même chose dans une requête SQL en utilisant soit NOT EXISTS, NOT IN ou LEFT JOIN WHERE IS NULL. Par exemple:
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
Je ne suis pas sûr que toute la syntaxe soit correcte, mais ce sont les techniques générales que j'ai vues. Pourquoi choisirais-je d'utiliser l'un plutôt que l'autre? Les performances diffèrent-elles ...? Lequel de ceux-ci est le plus rapide / le plus efficace? (Si cela dépend de la mise en œuvre, quand utiliserais-je chacun d'eux?)
EXISTSclause. Vous pouvez revenir *, NULLou autre: tout cela sera optimisé.
SELECTet FROM. Et *c'est juste plus facile à taper. Oui, SQLcela ressemble à un langage naturel, mais il est analysé et exécuté par une machine, une machine programmée. Ce n'est pas qu'il va soudainement s'introduire dans votre armoire et crier "Arrêtez de demander les champs supplémentaires dans une EXISTSrequête parce que j'en ai marre de les analyser et de les jeter!". C'est vraiment OK avec un ordinateur.