Pour les jointures internes, je n'ai pas vraiment remarqué une différence (mais comme avec toutes les performances de réglage, vous devez vérifier sur votre base de données dans vos conditions).
Cependant, lorsque vous mettez l'état fait une énorme différence si vous utilisez de droite ou de gauche rejoint. Par exemple tenir compte de ces deux requêtes:
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE ORD.OrderDate >'20090515'
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
AND ORD.OrderDate >'20090515'
La première sera de vous donner uniquement les enregistrements qui ont une ordonnance datée au plus tard le 15 Mai 2009 ainsi, la conversion de la gauche à se joindre à une jointure interne. La deuxième sera de donner à ces dossiers plus tous les clients n'ayant pas de commandes. L'ensemble des résultats est très différent selon l'endroit où vous mettez de l'état. (Sélectionnez * si, par exemple, seulement, vous ne devez pas utiliser de cours dans le code de production.) L'exception à cette règle est lorsque vous souhaitez afficher uniquement les enregistrements dans une table, mais pas les autres. Ensuite, vous utilisez la clause where pour la condition de ne pas le rejoindre.
SELECT *
FROM dbo.Customers AS CUS
LEFT JOIN dbo.Orders AS ORD
ON CUS.CustomerID = ORD.CustomerID
WHERE ORD.OrderID is null