No blog de Craig Freedman, Nested Loops Join , ele explica por que a junção de loops aninhados não pode suportar uma junção externa direita:
O problema é que examinamos a tabela interna várias vezes - uma vez para cada linha da junção externa. Podemos encontrar as mesmas linhas internas várias vezes durante essas várias verificações. Em que ponto podemos concluir que uma linha interna específica não se uniu ou não se unirá?
Alguém pode explicar isso de uma maneira realmente simples e educacional?
Isso significa que o loop começa com a tabela externa ( R1) e verifica a interna ( R2)?
Entendo que, para um R1valor que não se associe R2, ele deve ser substituído por um NULLpara que o conjunto de resultados se torne ( NULL, R2). Para mim, parece impossível retornar um R2valor quando R1não se junta, pelo motivo de não saber qual R2valor retornar. Mas não é assim que se explica. Ou é?
De fato, o SQL Server otimiza (e geralmente substitui) RIGHT JOINpor LEFT JOIN, mas a questão é explicar por que é tecnicamente impossível uma lógica de NESTED LOOPS JOINusar / dar suporte RIGHT JOIN.