Postgres ne le ferait pas vous donne une erreur pour les noms de colonne de sortie en double, mais certains clients le font. (Les noms en double ne sont pas non plus très utiles.)
Dans tous les cas, utilisez le USING
clause comme condition de jointure pour plier les deux colonnes de jointure en une seule :
SELECT *
FROM tbl_a a
LEFT JOIN tbl_b b USING (id);
Pendant que vous rejoignez la même table (auto-jointure), il y aura plus de noms de colonnes en double. La requête n'aurait guère de sens pour commencer. Cela commence à avoir un sens pour différent les tables. Comme vous l'avez indiqué dans votre question pour commencer :I have two tables ...
Pour éviter tous les noms de colonnes en double, vous devez les lister dans le SELECT
clause explicitement - éventuellement en distribuant des alias de colonne pour obtenir les deux instances avec des noms différents.
Ou vous pouvez utiliser un NATURAL
join - si cela correspond à votre cas d'utilisation inexpliqué :
SELECT *
FROM tbl_a a
NATURAL LEFT JOIN tbl_b b;
Cela se joint à toutes les colonnes qui partagent le même nom et les replie automatiquement - exactement de la même manière que la liste de tous les noms de colonnes communs dans un USING
clause. Vous devez connaître les règles pour les valeurs NULL possibles ...