Nel blog di Craig Freedman, Nested Loops Join , spiega perché i join di loop nidificati non possono supportare un join esterno destro:
Il problema è che eseguiamo la scansione della tabella interna più volte, una volta per ogni riga del join esterno. Potremmo incontrare le stesse file interne più volte durante queste scansioni multiple. A che punto possiamo concludere che una determinata fila interna non ha o non si unirà?
Qualcuno può spiegare questo in un modo davvero semplice ed educativo?
Significa che il ciclo inizia con la tabella esterna ( R1) e esegue la scansione di inner ( R2)?
Capisco che per un R1valore che non si unisce a R2, dovrebbe essere sostituito con un NULLcosì il set di risultati diventa ( NULL, R2). Per me sembra impossibile restituire un R2valore quando R1non si unisce, per il motivo che non può sapere quale R2valore restituire. Ma non è così che viene spiegato. O è?
SQL Server infatti ottimizza (e spesso sostituisce) RIGHT JOINcon LEFT JOIN, ma la domanda è spiegare perché è tecnicamente impossibile per una logica di NESTED LOOPS JOINsupporto / utilizzo RIGHT JOIN.