My assumption is you have something like this:
Table1
id   |  UID  |  action
1    |   1   |   bla
1    |   2   |   bleck
1    |   3   |   floop
Table2
id   |  UID  |  action
1    |   1   |   bla
1    |   2   |   bleck
1    |   4   |   floop
And you hope to update the third row in Table1 because the UID isn't in Table2.
The problem is that the third row in Table2 matches all rows in Table1 on your condition: Table1.id = Table2.id AND Table1.UID <> Table2.UID
Which means that in this case, all rows in Table1 will be updated with Action = 'Insert'
I think you want to use NOT EXISTS():
UPDATE T1
SET Action = 'Insert'
FROM Table1 T1
WHERE NOT EXISTS (SELECT *
                  FROM Table2 T2
                  WHERE T1.id = T2.id
                  AND T1.UID = T2.UID)
Edit, more explanation on why the join fails:
This is a many to many join, meaning that the condition allows multiple rows from Table1 to match multiple rows from Table2
The easiest way to see this in action is to change your update to a select:
SELECT *
FROM Table1 T1
JOIN Table2 T2 on T1.id = T2.id
              and T1.UID <> T2.UID
You may expect this to result in:
id   |  UID  |  action     id   |  UID  |  action
1    |   3   |   floop     1    |   4   |   floop
But really it will result in:
id   |  UID  |  action     id   |  UID  |  action
1    |   1   |   bla       1    |   4   |   floop
1    |   2   |   bleck     1    |   4   |   floop
1    |   3   |   floop     1    |   4   |   floop
This means that when you update you are hitting all the rows for id = 1 in Table1