PostgreSQL, Oracle y SQL Server tratan esto como una operación atómica. Consulte el siguiente SQL Fiddle y cambie el servidor para ver el comportamiento del siguiente SQL :
CREATE TABLE Swap (
a CHAR(1),
b CHAR(1)
);
INSERT INTO Swap (a, b) VALUES ('a', 'b');
UPDATE Swap SET a = b, b = a;
SELECT * FROM Swap;
MySQL fue el único RBDMS que implementa esto con ambas columnas que contienen el mismo valor después de la actualización.
En cuanto a cómo resolvería esto, en su lugar, extraería los valores de la base de datos, haría los cálculos dentro de su aplicación (en lugar de su declaración de actualización) y luego actualizaría la base de datos con los valores calculados. De esta manera puede garantizar que el cálculo se realizará de manera consistente.