Dans le blog de Craig Freedman, Nested Loops Join , il explique pourquoi la jointure de boucles imbriquées ne peut pas prendre en charge une jointure externe droite:
Le problème est que nous analysons la table interne plusieurs fois - une fois pour chaque ligne de la jointure externe. Nous pouvons rencontrer les mêmes lignes internes plusieurs fois pendant ces analyses multiples. À quel moment pouvons-nous conclure qu'une rangée intérieure particulière ne s'est pas jointe ou ne se joindra pas?
Quelqu'un peut-il expliquer cela d'une manière vraiment simple et éducative?
Est-ce à dire que la boucle commence par la table externe ( R1) et scanne l'intérieur ( R2)?
Je comprends que pour une R1valeur qui ne rejoint pas R2, elle doit être remplacée par un NULLpour que l'ensemble de résultats devienne ( NULL, R2). Pour moi, il semble impossible de renvoyer une R2valeur lorsque R1ne se joint pas, car il ne peut pas savoir quelle R2valeur renvoyer. Mais ce n'est pas ainsi que cela est expliqué. Ou est-ce?
SQL Server optimise en fait (et remplace souvent) RIGHT JOINavec LEFT JOIN, mais la question est d'expliquer pourquoi il est techniquement impossible pour une logique d' NESTED LOOPS JOINutilisation / de support RIGHT JOIN.