Вы можете упростить свой оператор, используя NULL-safe равный оператор:
UPDATE destination d
JOIN source s
ON d.id = s.id
SET d.updateFlag = 1
WHERE !(d.col1 <=> s.col1)
OR !(d.col2 <=> s.col2)
...etc
В качестве альтернативы, вы можете использовать UNION для поиска дублирующихся строк:
SELECT tbl, id, col1, col2, col3
FROM (
SELECT 't1' AS tbl, id, col1, col2, col3
FROM t1
UNION ALL
SELECT 't2' AS tbl, id, col1, col2, col3
FROM t2
) tmp
GROUP BY id, col1, col2, col3 HAVING COUNT(*) = 1;
Затем вы можете использовать полученный результат в своем запросе на обновление:
UPDATE destination d
SET d.updateFlag = 1
WHERE EXISTS (
SELECT NULL FROM (
SELECT id, col1, col2, col3 FROM t1
UNION All
SELECT id, col1, col2, col3 FROM t2
) tmp
WHERE d.id = tmp.id
GROUP BY id, col1, col2, col3
HAVING COUNT(*) = 1
)