Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Performances SQL JOIN vs IN ?

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 vs JOIN vs EXISTS