SQL Server dispone di tre algoritmi tra cui scegliere quando è necessario unire due tabelle. Il Nested-Loops-Join, l'Hash-Join e il Sort-Merge-Join. Quale seleziona si basa su stime di costo. In questo caso si è pensato che, in base alle informazioni che aveva a disposizione, un Sort-Merge-Join fosse la scelta giusta.
Nei piani di esecuzione di SQL Server un Sort-Merge è suddiviso in due operatori, Sort e Merge-Join, perché l'operazione di ordinamento potrebbe non essere necessaria, ad esempio se i dati sono già ordinati.
Per ulteriori informazioni sui join, dai un'occhiata alla mia serie di join qui:http://sqlity.net/en/1146/a-join-a-day-introduzione/ L'articolo sul Sort-Merg-Join è qui:http://sqlity.net/en/1480/a-join-a-day-the-sort-merge-join/
Per rendere la tua query più veloce, per prima cosa guarderei gli indici. Hai un sacco di scansioni di indici in cluster nella query. Se riesci a sostituirne alcuni con le ricerche, molto probabilmente starai meglio. Verificare inoltre se le stime prodotte da SQL Server corrispondono ai conteggi di righe effettivi in un piano di esecuzione effettivo. Se sono lontani, SQL Server spesso fa scelte sbagliate. Pertanto, fornire statistiche migliori può aiutarti anche a interrogare le prestazioni.