Avec une jointure interne, la différence n'est qu'une différence sémantique. Les deux requêtes doivent produire exactement le même plan de requête et exactement le même résultat.
Cependant, lorsque vous utilisez des jointures externes, il est important que la condition soit sur where
clause ou on
la clause on.
UPDATE li
SET li.Description = im.Description
FROM tbSupplierLineItem li
RIGHT JOIN tbIMPACArchieveNew im ON li.ItemId = im.CommomCode
AND li.ProcessedDate >= CONVERT(DATE,GETDATE())
Est différent de
UPDATE li
SET li.Description = im.Description
FROM tbSupplierLineItem li
RIGHT JOIN tbIMPACArchieveNew im ON li.ItemId = im.CommomCode
WHERE li.ProcessedDate >= CONVERT(DATE,GETDATE())
pas seulement au niveau sémantique.
Alors que la première requête renverra le résultat attendu d'une jointure droite, la seconde renverra en fait les résultats attendus d'une jointure interne.
C'est parce que les bonnes valeurs de table peut être null si vous avez des enregistrements sur la table de gauche qui ne leur correspondent pas, et puisque comparer n'importe quelle valeur à null (y compris un autre null) se traduira par un faux, cela change essentiellement la jointure droite en une jointure interne.