Несмотря на то, что он работает должным образом, он задокументирован как «ненадежный»:
Назначения UPDATE для одной таблицы обычно оцениваются слева направо
право. Для обновлений с несколькими таблицами нет гарантии, что
назначения выполняются в любом конкретном порядке.
( Справочное руководство по MySQL 8.0 / ... / Синтаксис ОБНОВЛЕНИЯ )
Но вы можете вычислить сумму в производной таблице:
update t1
join t2 using (id)
join (
select id, t1.amount + t2.amount as amount
from t1 join t2 using(id)
) x using (id)
set t1.amount = x.amount,
t2.amount = 0
В этом случае порядок в предложении SET не имеет значения, поскольку назначения не мешают.
Для InnoDB один оператор UPDATE является атомарным. Он либо выполнен полностью, либо не выполнен вообще. Если что-то пойдет не так во время выполнения (например, сбой сервера или переполнение типа данных), все изменения будут отменены или просто не зафиксированы.