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 R1valor que no se une con R2, debe reemplazarse con un NULLpara que el conjunto de resultados se convierta en ( NULL, R2). Para mí, parece imposible devolver un R2valor cuando R1no se une, por la razón de que no puede saber qué R2valor devolver. Pero esa no es la forma en que se explica. ¿O es eso?
De hecho, SQL Server optimiza (y a menudo reemplaza) RIGHT JOINcon LEFT JOIN, pero la pregunta es explicar por qué es técnicamente imposible para una lógica de NESTED LOOPS JOINuso / soporte RIGHT JOIN.
fuente
