Il motivo è perché stai includendo la tabella di destra nel WHERE
clausola. Dovresti spostarlo su ON
condizione del 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
Il motivo per cui lo fa è perché WHERE
la clausola viene valutata dopo il LEFT JOIN
, che quindi filtra il tuo NULL
risultati dal LEFT JOIN
.
Compresa la tabella di destra di un LEFT JOIN
(o la tabella di sinistra di un RIGHT JOIN
) nel WHERE
La clausola trasforma efficacemente il OUTER JOIN
in un INNER JOIN
.