De manière générale, IN
et JOIN
sont des requêtes différentes qui peuvent donner des résultats différents.
SELECT a.*
FROM a
JOIN b
ON a.col = b.col
n'est pas la même chose que
SELECT a.*
FROM a
WHERE col IN
(
SELECT col
FROM b
)
, sauf si b.col
est unique.
Cependant, c'est le synonyme de la première requête :
SELECT a.*
FROM a
JOIN (
SELECT DISTINCT col
FROM b
)
ON b.col = a.col
Si la colonne de jointure est UNIQUE
et marqués comme tels, ces deux requêtes donnent le même plan dans SQL Server
.
Si ce n'est pas le cas, alors IN
est plus rapide que JOIN
sur DISTINCT
.
Consultez cet article sur mon blog pour plus de détails sur les performances :
IN
vsJOIN
vsEXISTS