Por que DISTINCT ON
está classificando as linhas? Por exemplo, a consulta
SELECT DISTINCT ON (a) a
FROM (
VALUES (2), (3), (1)
) x(a);
terá o resultado
1
2
3
enquanto semDISTINCT ON
SELECT a
FROM (
VALUES (2), (3), (1)
) x(a);
vou pegar o pedido correto
2
3
1
Como posso preservar a ordem natural dos valores definidos? Por "ordem natural" quero dizer "a ordem em que os valores foram definidos". Eu entendo que o DBMS pode alterar a ordem se eu não especificar explicitamente com um ORDER BY
, mas não esperava que DISTINCT ON
eu interferisse dessa maneira.
Distinct remove linhas "duplicadas" do conjunto de resultados. Isso é muito mais fácil de fazer se os itens que estão sendo comparados chegarem ordenadamente ordenados.
Verifique o Plano de Explicação para esta consulta - provavelmente conterá etapas extras de "Classificação" e "Única". Adivinha o que eles estão fazendo.
"
select distinct
" é sempre uma bandeira vermelha para mim. É quase sempre mal usado, um band-aid para contornar um problema maior e introduz problemas próprios. Lembre-se, o desempenho de ...... é aproximadamente comparável ao de ...
Pergunte a si mesmo por que [você acha] que precisa usar "distinto".