Разница между DISTINCT и DISTINCT ON при фильтрации уникальных строк в PostgreSQL заключается в том, что DISTINCT удаляет все повторяющиеся строки, а DISTINCT ON позволяет указывать, какую строку сохранить для каждого уникального значения. 1
DISTINCT возвращает все уникальные комбинации указанных полей. 35 Если столбцы не указаны, то отбираются строки, в которых значения уникальны во всех столбцах. 2
DISTINCT ON возвращает только первую строку для каждой уникальной комбинации указанных столбцов на основе оператора ORDER BY в запросе. 35 Любые другие поля, перечисленные в операторе SELECT, будут возвращены для этой первой строки. 3
Таким образом, DISTINCT удаляет дубликаты, а DISTINCT ON даёт возможность контролировать, какую повторяющуюся строку сохранить. 1