Powodem jest to, że umieszczasz tabelę po prawej stronie w WHERE klauzula. Powinieneś przenieść to do ON warunek 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
Powodem tego jest to, że WHERE klauzula jest oceniana po LEFT JOIN , który następnie odfiltrowuje Twój NULL wyniki z LEFT JOIN .
W tym tabela po prawej stronie LEFT JOIN (lub tabela po lewej stronie RIGHT JOIN ) w WHERE klauzula skutecznie przekształca OUTER JOIN do INNER JOIN .