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 R1
valor que não se associe R2
, ele deve ser substituído por um NULL
para que o conjunto de resultados se torne ( NULL, R2
). Para mim, parece impossível retornar um R2
valor quando R1
não se junta, pelo motivo de não saber qual R2
valor retornar. Mas não é assim que se explica. Ou é?
De fato, o SQL Server otimiza (e geralmente substitui) RIGHT JOIN
por LEFT JOIN
, mas a questão é explicar por que é tecnicamente impossível uma lógica de NESTED LOOPS JOIN
usar / dar suporte RIGHT JOIN
.
fonte