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

Quelle requête SQL est la plus rapide ? Filtrer sur les critères de jointure ou sur la clause Where ?

En termes de performances, ils sont identiques (et produisent les mêmes plans)

Logiquement, vous devriez faire l'opération qui a encore du sens si vous remplacez INNER JOIN avec un LEFT JOIN .

Dans votre cas, cela ressemblera à ceci :

SELECT  *
FROM    TableA a
LEFT JOIN
        TableXRef x
ON      x.TableAID = a.ID
        AND a.ID = 1
LEFT JOIN
        TableB b
ON      x.TableBID = b.ID

ou ceci :

SELECT  *
FROM    TableA a
LEFT JOIN
        TableXRef x
ON      x.TableAID = a.ID
LEFT JOIN
        TableB b
ON      b.id = x.TableBID
WHERE   a.id = 1

L'ancienne requête ne renverra aucune correspondance réelle pour a.id autre que 1 , donc la dernière syntaxe (avec WHERE ) est logiquement plus cohérent.