En el blog de Craig Freedman, Nested Loops Join , explica por qué la unión de bucles anidados no puede admitir una unión externa derecha:
El problema es que escaneamos la tabla interna varias veces, una vez por cada fila de la unión externa. Podemos encontrar las mismas filas internas varias veces durante estos escaneos múltiples. ¿En qué punto podemos concluir que una fila interna particular no se ha unido o no se unirá?
¿Alguien puede explicar esto de una manera realmente simple y educativa?
¿Significa que el bucle comienza con la tabla externa ( R1
) y escanea la interna ( R2
)?
Entiendo que para un R1
valor que no se une con R2
, debe reemplazarse con un NULL
para que el conjunto de resultados se convierta en ( NULL, R2
). Para mí, parece imposible devolver un R2
valor cuando R1
no se une, por la razón de que no puede saber qué R2
valor devolver. Pero esa no es la forma en que se explica. ¿O es eso?
De hecho, SQL Server optimiza (y a menudo reemplaza) RIGHT JOIN
con LEFT JOIN
, pero la pregunta es explicar por qué es técnicamente imposible para una lógica de NESTED LOOPS JOIN
uso / soporte RIGHT JOIN
.
fuente