Pod względem wydajności są takie same (i produkują te same plany)
Logicznie rzecz biorąc, powinieneś wykonać operację, która nadal ma sens, jeśli zastąpisz INNER JOIN z LEFT JOIN .
W twoim przypadku będzie to wyglądać tak:
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
lub to:
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
Poprzednie zapytanie nie zwróci żadnych rzeczywistych dopasowań dla a.id inne niż 1 , więc druga składnia (z WHERE ) jest logicznie bardziej spójny.