In Bezug auf die Leistung sind sie gleich (und produzieren die gleichen Pläne)
Logischerweise sollten Sie die Operation machen, die noch Sinn macht, wenn Sie INNER JOIN
ersetzen mit einem LEFT JOIN
.
In Ihrem Fall sieht das so aus:
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
oder dies:
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
Die frühere Abfrage gibt keine tatsächlichen Übereinstimmungen für a.id
zurück außer 1
, also die letztere Syntax (mit WHERE
) ist logisch konsistenter.