Postgres не би ви дава грешка за дублирани имена на изходни колони, но някои клиенти го правят. (Дублиращите се имена също не са много полезни.)
И в двата случая използвайте USING
клауза като условие за свързване, за да сгънете двете колони за свързване в една:
SELECT *
FROM tbl_a a
LEFT JOIN tbl_b b USING (id);
Докато се присъединявате към една и съща таблица (самосъединяване), ще има повече дублирани имена на колони. Запитването едва ли би имало смисъл като начало. Това започва да има смисъл за различни маси. Както казахте във въпроса си като начало:I have two tables ...
За да избегнете всички дублирани имена на колони, трябва да ги изброите в SELECT
клауза изрично - евентуално раздаване на псевдоними на колони, за да получите и двата екземпляра с различни имена.
Или можете да използвате NATURAL
присъединяване - ако това отговаря на вашия необясним случай на употреба:
SELECT *
FROM tbl_a a
NATURAL LEFT JOIN tbl_b b;
Това се присъединява към всички колони, които споделят едно и също име и ги сгъва автоматично - точно същото като изброяването на всички общи имена на колони в USING
клауза. Трябва да сте наясно с правилата за възможни NULL стойности ...