o
distinct
palavra-chave está fazendo o que deveria fazer, retornar uma linha cada uma com um determinado valor de coluna. Distinct não permite que você especifique qual essa linha será retornada e fica claro na consulta original que essa ordenação é permitida (há uma linha com id 443 que segue uma linha com id 429). Para assumir o controle de quais linhas serão retornadas, você precisa reformular a consulta. Uma solução típica que vou usar é usar um
group by
, selecionando a coluna do grupo e a linha desejada de cada grupo, algo no sentido de SELECT message.id, MAX(message.created_at) FROM message GROUP BY message.id;
Se eu precisar fazer mais, usarei esse tipo de consulta como uma subseleção em uma consulta maior, possivelmente juntando-se ao campo id para obter mais campos da linha preferida ou ordenando a consulta de uma maneira específica.