select distinct
- это оператор, который гарантирует, что в результирующем наборе нет повторяющихся строк .То есть он отфильтровывает строки, в которых все столбцы одинаковы (а NULL
значения считаются равными).
Он не просматривает подмножество столбцов.
Иногда люди используютselect distinct
и не понимаю, что это относится ко всем столбцам.Довольно забавно, когда первый столбец заключен в скобки - как будто скобки имеют значение (они этого не делают).
Тогда у вас также могут возникнуть ситуации, когда значения выглядят одинаково, но это не так.
Рассмотрим этот простой пример, где значения отличаются только пробелом в качестве конца строки:
select distinct x
from (select 'a' as x union all
select 'a '
) y;
Здесь - это скрипта db <> с этим примером.
Возвращает две строки, а не 1.
Без примеров данных трудно сказать, на какую из этих ситуаций вы ссылаетесь.Но строки, которые вы считаете «идентичными», на самом деле не совпадают.