Điều đó xảy ra bởi vì một chế độ xem sẽ có hai cột được đặt tên id, một từ table1 và một từ table2, vì select *.
Bạn cần chỉ định id nào bạn muốn trong chế độ xem.
SELECT table1.id, column2, column3, ... FROM table1, table2
WHERE table1.id = table2.id
Truy vấn hoạt động vì nó có thể có các cột được đặt tên giống nhau ...
postgres=# select 1 as a, 2 as a;
a | a
---+---
1 | 2
(1 row)
postgres=# create view foobar as select 1 as a, 2 as a;
ERROR: column "a" duplicated
postgres=# create view foobar as select 1 as a, 2 as b;
CREATE VIEW