En termes de performances, ils sont identiques (et produisent les mêmes plans)
Logiquement, vous devriez faire l'opération qui a encore du sens si vous remplacez INNER JOIN avec un LEFT JOIN .
Dans votre cas, cela ressemblera à ceci :
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 ceci :
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
L'ancienne requête ne renverra aucune correspondance réelle pour a.id autre que 1 , donc la dernière syntaxe (avec WHERE ) est logiquement plus cohérent.