C'est parce que vous essayez de définir column3
à un résultat renvoyé, et SQL s'attend à ce qu'il s'agisse d'une seule valeur (scalaire). Le moteur SQL devient confus lorsque vous lui transmettez plus d'une valeur de retour (laquelle doit-il utiliser ?... il ne suppose pas qu'il parcourt les résultats). Ainsi, si vous souhaitez mettre à jour un ensemble de résultats complet, vous devez créer une sous-table à partir de votre requête et vous joindre à celle-ci. Votre requête devrait ressembler davantage à ceci
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)
Sous cette hypothèse que table3.id correspond aux autres identifiants, vous n'avez pas non plus vraiment besoin du where table2.id IN ...