UPDATE
T1
SET
f2 = T2.f2,
f3 = T2.f3 -- If it's a date, save it as a date, not a VARCHAR
FROM
dbo.Table1 T1
INNER JOIN Server.db.dbo.Table2 T2 ON
T2.f1 = T1.f1
LEFT OUTER JOIN Server.db.dbo.Table2 T2_later ON
T2_later.f1 = T2.f1 AND
T2_later.f3 > T2.f3
WHERE
T2_later.f1 IS NULL
Это может иметь некоторые проблемы с производительностью при работе с серверами, если таблица 2 велика. Возможно, лучше создать представление в этой базе данных и использовать его для обновлений:
CREATE VIEW dbo.T2_Latest
AS
SELECT
T2.f1,
T2.f2,
T2.f3
FROM
dbo.Table2 T2
LEFT OUTER JOIN dbo.Table2 T2_later ON
T2_later.f1 = T2.f1 AND
T2_later.f3 > T2.f3
WHERE
T2_later.f1 IS NULL
Тогда вам просто нужно присоединиться к f1 (кстати, вам не нужны эти критерии и в INNER JOIN, и в предложении WHERE). Представление отфильтрует более ранние строки ДО того, как ему нужно будет сравнить их по серверам.
В службах SSIS есть другие решения, использующие компонент Merge, Lookup, или Join, который, вероятно, будет работать лучше.