De manière générale, INNER JOIN
et EXISTS
sont des choses différentes.
Le premier renvoie les doublons et les colonnes des deux tables, le second renvoie un enregistrement et, étant un prédicat, renvoie les enregistrements d'une seule table.
Si vous faites une jointure interne sur un UNIQUE
colonne, ils affichent les mêmes performances.
Si vous effectuez une jointure interne sur un jeu d'enregistrements avec DISTINCT
appliqué (pour se débarrasser des doublons), EXISTS
est généralement plus rapide.
IN
et EXISTS
les clauses (avec une corrélation d'équijointure) emploient généralement l'une des nombreuses clauses SEMI JOIN
des algorithmes généralement plus efficaces qu'un DISTINCT
sur l'une des tables.
Voir cet article sur mon blog :
- IN vs JOIN vs EXISTS