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

Ter um 'OR' em uma condição INNER JOIN é uma má ideia?


Este tipo de JOIN não é otimizável para um HASH JOIN ou um MERGE JOIN .

Pode ser expresso como uma concatenação de dois conjuntos de resultados:
SELECT  *
FROM    maintable m
JOIN    othertable o
ON      o.parentId = m.id
UNION
SELECT  *
FROM    maintable m
JOIN    othertable o
ON      o.id = m.parentId

, cada um deles sendo um equijoin, no entanto, SQL Server O otimizador de 's não é inteligente o suficiente para vê-lo na consulta que você escreveu (embora sejam logicamente equivalentes).