sql >> Base de Datos >  >> RDS >> Sqlserver

¿Es una mala idea tener un 'O' en una condición INNER JOIN?

Este tipo de JOIN no es optimizable a HASH JOIN o un MERGE JOIN .

Se puede expresar como una concatenación de dos 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

, siendo cada uno de ellos un equijoin, sin embargo, SQL Server El optimizador de no es lo suficientemente inteligente como para verlo en la consulta que escribió (aunque son lógicamente equivalentes).