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
.