Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que minha junção esquerda do t-sql não está funcionando?


A razão é porque você está incluindo a tabela da direita no WHERE cláusula. Você deve mover isso para o ON condição do 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

A razão disso é porque o WHERE cláusula é avaliada depois o LEFT JOIN , que filtra seu NULL resultados do LEFT JOIN .

Incluindo a tabela à direita de um LEFT JOIN (ou a tabela à esquerda de um RIGHT JOIN ) no WHERE cláusula transforma efetivamente o OUTER JOIN em um INNER JOIN .