Tabele remote intr-un join local risti sa creeze niste planuri suboptime, cum ar fi:
1) aduce local tabele remote (copie in tempdb, eventual filtrata pe conditii ce se pot aplica) apoi face join-ul
2) face un merge hash in memorie din transferul tabelelor remote (eventaul filtrate daca se poate)
3) aduce o tabele local (filtrata eventual) si face nested loop *remote* pentru fiecare record
Toate aceaste variante sint extrem de ineficiente, mai ales daca tabele sint mari. Nici una nu se compara cu executarea join-ului remote si apoi aducerea locala doar a rezultatului.
Exista unele situatii, rare, cind SQL poate sa faca 'push' la join remote, dar esti la mila providerului din linked server si a planului ales de optimizator. Cel mai simplu este sa faci un OPENQUERY la un select care face el join-ul, sau sa creezi pe remote server un view si sa selectezi din view-ul remote (preferabil, daca potzi sa modifici serverul remote).
http://rusanu.com