Lorsque vous utilisez "n'existe pas" ou "pas dans" dans votre requête SQL, vous laissez Oracle choisir de fusionner les chemins d'accès anti-jointure ou de hachage anti-jointure.
Explication rapide
Par exemple, étant donné la jointure entre la table A et B (de A join B sur A.x =B.x) Oracle récupérera toutes les données pertinentes de la table A et essaiera de les faire correspondre avec les lignes correspondantes de la table B, donc cela dépend strictement de la sélectivité de la table Un prédicat.
Lors de l'utilisation de l'optimisation anti-jointure, Oracle peut choisir la table avec une sélectivité plus élevée et la faire correspondre à l'autre, ce qui peut entraîner un code beaucoup plus rapide.
Il ne peut pas faire cela avec une jointure ou une sous-requête normale, car il ne peut pas supposer qu'une correspondance entre les tables A et B suffit pour renvoyer cette ligne.
Conseils associés : HASH_AJ, MERGE_AJ.
Plus :
Ceci ressemble à un bel article détaillé sur le sujet.
Ici est un autre article plus décent.