Postgres não dar-lhe um erro para nomes de coluna de saída duplicados, mas alguns clientes fazem. (Nomes duplicados também não são muito úteis.)
De qualquer forma, use o
USING
cláusula como condição de junção para dobrar as duas colunas de junção em uma:SELECT *
FROM tbl_a a
LEFT JOIN tbl_b b USING (id);
Enquanto você se junta à mesma tabela (auto-junção), haverá mais nomes de coluna duplicados. A consulta quase não faria sentido para começar. Isso começa a fazer sentido para diferentes mesas. Como você afirmou em sua pergunta para começar:
I have two tables ...
Para evitar todos os nomes de coluna duplicados, você deve listá-los no
SELECT
cláusula explicitamente - possivelmente lidando com aliases de coluna para obter ambas as instâncias com nomes diferentes. Ou você pode usar um
NATURAL
join - se isso se encaixa no seu caso de uso inexplicável:SELECT *
FROM tbl_a a
NATURAL LEFT JOIN tbl_b b;
Isso une todas as colunas que compartilham o mesmo nome e as dobra automaticamente - exatamente o mesmo que listar todos os nomes de colunas comuns em um
USING
cláusula. Você precisa estar ciente das regras para possíveis valores NULL ... Detalhes no manual.