Let’s say I have two SQL Server databases running on separate machines, call them MachineA and MachineB.
If I performed a query like the following
SELECT
[Store].[Name] AS [Store Name],
[Employee].[Name] AS [Employee Name],
SUM([Sale].[Amount]) AS [Total Sales]
FROM [MachineA].[DatabaseA].[dbo].[Sales] AS [Sale]
INNER JOIN [MachineB].[DatabaseB].[dbo].[Employees] AS [Employee]
ON [Sale].[EmployeeId] = [Employee].[EmployeeId]
INNER JOIN [MachineB].[DatabaseB].[dbo].[Stores] AS [Store]
ON [Employee].[StoreId] = [Store].[StoreId]
GROUP BY [Store].[Name], [Employee].[Name]
Where we assume that the query is running on MachineA, where is work actually being performed? Does MachineA perform all the reads and send the rows over to MachineB for JOINing? Or is something more complicated going on here?
The query optimizer will choose the best plan according to the linked server driver capabilities.