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 R1
valore che non si unisce a R2
, dovrebbe essere sostituito con un NULL
così il set di risultati diventa ( NULL, R2
). Per me sembra impossibile restituire un R2
valore quando R1
non si unisce, per il motivo che non può sapere quale R2
valore restituire. Ma non è così che viene spiegato. O è?
SQL Server infatti ottimizza (e spesso sostituisce) RIGHT JOIN
con LEFT JOIN
, ma la domanda è spiegare perché è tecnicamente impossibile per una logica di NESTED LOOPS JOIN
supporto / utilizzo RIGHT JOIN
.