Più semplice, più breve, più veloce con DISTINCT ON di PostgreSQL :
SELECT DISTINCT ON (a.id)
a.id, a.name, a.date, b.code1, b.code2
FROM table_a a
LEFT JOIN table_b b USING (id)
ORDER BY a.id, b.sort
Dettagli, spiegazioni, benchmark e link in questa risposta strettamente correlata
.
Utilizzo un LEFT JOIN , in modo che le righe da table_a senza alcuna riga corrispondente in table_b non vengono eliminati.
Note a margine:
Sebbene sia consentito in PostgreSQL, non è saggio usare date come nome della colonna. È una parola riservata
in ogni standard SQL e un nome di tipo in PsotgreSQL.
È anche un anti-pattern per denominare una colonna ID id . Non descrittivo e non utile. Una (delle tante) possibili convenzioni di denominazione sarebbe quella di denominarla dopo la tabella in cui è la chiave primaria:table_a_id . Stesso nome per le chiavi esterne che vi fanno riferimento (se nessun altro nome naturale ha la precedenza).