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.