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.