Em termos de desempenho, eles são os mesmos (e produzem os mesmos planos)
Logicamente, você deve fazer a operação que ainda faz sentido se substituir
INNER JOIN
com um LEFT JOIN
. No seu caso, ficará assim:
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
ou isto:
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
A consulta anterior não retornará nenhuma correspondência real para
a.id
diferente de 1
, então a última sintaxe (com WHERE
) é logicamente mais consistente.