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

¿Qué consulta SQL es más rápida? ¿Filtrar en Criterios de unión o Cláusula Dónde?

En cuanto al rendimiento, son iguales (y producen los mismos planes)

Lógicamente, deberías hacer la operación que todavía tiene sentido si reemplazas INNER JOIN con un LEFT JOIN .

En su propio caso, esto se verá así:

SELECT  *
FROM    TableA a
LEFT JOIN
        TableXRef x
ON      x.TableAID = a.ID
        AND a.ID = 1
LEFT JOIN
        TableB b
ON      x.TableBID = b.ID

o esto:

SELECT  *
FROM    TableA a
LEFT JOIN
        TableXRef x
ON      x.TableAID = a.ID
LEFT JOIN
        TableB b
ON      b.id = x.TableBID
WHERE   a.id = 1

La consulta anterior no devolverá ninguna coincidencia real para a.id diferente a 1 , por lo que la última sintaxis (con WHERE ) es lógicamente más consistente.