select * from x1; A B ---------- ---------- 1 100 select * from x2; A B ---------- ---------- 1 200 update x1 set b=(select b from x2 where x1.a=x2.a and x1.b <>x2.b); 1 row updated. select * from x1,x2; A B A B ---------- ---------- ---------- ---------- 1 200 1 200 If I run again update , it should not update X1 table but it does.can anybody tell me why it is doing update x1 set b=(select b from x2 where x1.a=x2.a and x1.b <>x2.b); 1 row updated. select * from x1; A B ---------- ---------- 1 select * from x2; A B ---------- ---------- 1 200