I ran the queries on simplified tables and here are the results:
id col id col
----------- ---- ----------- ----
1 A 1 A
2 B 2 B
3 C 3 C
4 D NULL D
id col id col id col
----------- ---- ----------- ---- ----------- ----
1 A 1 A NULL NULL
2 B 2 B NULL NULL
3 C 3 C NULL NULL
4 D NULL NULL NULL D
As you can see you still get the 4th T2.col value in the first output thanks to the OR. In the second output T2.col is null because it's not matched by ID. What you want is T3.col value. Your query should look like this:
SELECT t1.id, coalesce(t2.col, t3.col) as col
FROM Table1 t1
LEFT JOIN Table2 t2
ON t1.ID = t2.ID
LEFT JOIN Table2 t3
ON (
t1.col = t3.col
AND t2.ID IS NULL
)
Then the result is as expected:
id col
----------- ----
1 A
2 B
3 C
4 D