Essa é uma pergunta muito boa. Eu já li algumas respostas úteis aqui, mas provavelmente posso adicionar uma explicação mais precisa.
Reduzir o número de resultados da consulta com uma instrução GROUP BY é fácil, desde que você não consulte informações adicionais. Vamos supor que você tenha a seguinte tabela 'locais'.
--country-- --city--
France Lyon
Poland Krakow
France Paris
France Marseille
Italy Milano
Agora a consulta
SELECT country FROM locations
GROUP BY country
vai resultar em:
--country--
France
Poland
Italy
No entanto, a seguinte consulta
SELECT country, city FROM locations
GROUP BY country
... gera um erro no MS SQL, porque como seu computador pode saber qual das três cidades francesas "Lyon", "Paris" ou "Marselha" você deseja ler no campo à direita de "França"?
Para corrigir a segunda consulta, você deve adicionar essas informações. Uma maneira de fazer isso é usar as funções MAX () ou MIN (), selecionando o valor maior ou menor entre todos os candidatos. MAX () e MIN () não são apenas aplicáveis aos valores numéricos, mas também comparam a ordem alfabética dos valores das strings.
SELECT country, MAX(city) FROM locations
GROUP BY country
vai resultar em:
--country-- --city--
France Paris
Poland Krakow
Italy Milano
ou:
SELECT country, MIN(city) FROM locations
GROUP BY country
vai resultar em:
--country-- --city--
France Lyon
Poland Krakow
Italy Milano
Essas funções são uma boa solução, desde que você esteja bem ao selecionar seu valor nas extremidades da ordem alfabética (ou numérica). Mas e se não for esse o caso? Vamos supor que você precise de um valor com uma determinada característica, por exemplo, começando com a letra 'M'. Agora as coisas ficam complicadas.
A única solução que eu encontrei até agora é colocar toda a sua consulta em uma subconsulta e construir manualmente a coluna adicional fora dela:
SELECT
countrylist.*,
(SELECT TOP 1 city
FROM locations
WHERE
country = countrylist.country
AND city like 'M%'
)
FROM
(SELECT country FROM locations
GROUP BY country) countrylist
vai resultar em:
--country-- --city--
France Marseille
Poland NULL
Italy Milano
SELECT DISTINCT * FROM table
funciona para você?