Това е така, защото се опитвате да зададете column3
към върнат резултат и SQL очаква това да бъде само една стойност (скалар). Механизмът на SQL се обърква, когато му подадете повече от една върната стойност (коя трябва да използва?... не предполага итерация през резултатите). Така че, ако искате да актуализирате цял набор от резултати, тогава трябва да създадете подтаблица от вашата заявка и да се присъедините към нея. Вашата заявка трябва да изглежда по-скоро така
UPDATE Table3
SET Column3 = subtable.value
FROM Table3
JOIN (
select t2.column3+t1.column3 as value, t1.id
from table2 t2 with (nolock) join table1 t1
on table2.id=t1.id
where table2.id IN (100,101)
) AS subtable
ON subtable.id = Table3.id
WHERE table3.id IN (100, 101)
При това предположение, че table3.id съвпада с другите идентификатори, вие наистина не се нуждаете от вътрешния where table2.id IN ...