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

Pourquoi ma jointure gauche t-sql ne fonctionne-t-elle pas ?

La raison est que vous incluez le tableau de droite dans WHERE clause. Vous devriez déplacer cela vers ON condition de la LEFT JOIN :

Select    P.appId, S.stepId, S.section, P.start
From      #appSteps    S   With (NoLock)
Left Join #appProgress P   On  S.stepId = P.stepId 
                           And P.appId = 101
Where     S.section Is Not Null

La raison pour laquelle il le fait est que le WHERE la clause est évaluée après le LEFT JOIN , qui filtre ensuite votre NULL résulte de la LEFT JOIN .

Inclusion de la table de droite d'un LEFT JOIN (ou la table de gauche d'un RIGHT JOIN ) dans le WHERE la clause transforme efficacement le OUTER JOIN dans un INNER JOIN .