cláusula_SELECT : SELECT [ALL | DISTINCT] lista_SELECT
lista_SELECT : * | item_lista [ , item_lista ]…
item_lista : expressão [AS identificador_de_coluna] | tabela.*
A cláusula SELECT especifica as colunas da tabela a ser retornada numa especificação de consulta. Um novo identificador de coluna pode ser atribuído às colunas da tabela resultante com o uso da cláusula AS. O novo identificador pode ser usado para referenciar colunas da tabela resultante na cláusula ORDER BY.
A cláusula SELECT é aplicada sobre a tabela resultante das cláusulas FROM e opcionalmente das cláusulas WHERE, GROUP BY e HAVING.
Se a cláusula GROUP BY tiver sido aplicada, a tabela é dita agrupada.
A cláusula SELECT * é equivalente a uma lista SELECT que contenha todas as colunas que constituem a tabela retornada pela cláusula FROM na ordem em que a tabela foi definida. O item tabela.*, da mesma forma, especifica todas as colunas na tabela indicada.
Se a cláusula SELECT for aplicada a uma tabela não agrupada e a lista SELECT incluir uma função, então o resultado da especificação de consulta é uma tabela de uma única linha contendo em suas colunas os valores resultantes da avaliação das funções correspondentes aplicadas à tabela original.
Se a lista SELECT não incluir funções, cada expressão é avaliada para cada linha da tabela original. A tabela resultante tem a mesma cardinalidade (número de linhas) da primeira e suas colunas contêm os valores derivados das expressões correspondentes.
Se a cláusula SELECT é aplicada a uma tabela agrupada em um ou mais grupos, a tabela resultante tem cardinalidade igual ao número de grupos e cada linha corresponde à aplicação das expressões à cada grupo.
Se a opção DISTINCT é especificada, o resultado da especificação de consulta retornará a tabela definida pela cláusula SELECT com todas as linhas duplicadas eliminadas. Duas linhas são consideradas duplicadas se os valores em todas as colunas correspondentes forem iguais. Dois valores nulos são considerados iguais e são diferentes de quaisquer outros valores.
Se o resultado das cláusulas subsequentes for uma tabela agrupada, as referências às colunas presentes em cada expressão devem ser referências a colunas de grupamento (especificadas em uma cláusula GROUP BY) ou estar dentro de uma função.
Se o resultado das cláusulas subsequentes não for uma tabela agrupada e alguma expressão incluir uma função, então todas as referências a uma coluna devem estar numa função e o resultado da especificação de consulta é uma tabela de uma única linha.
Veja também Especificação de consulta e Comando SELECT dinâmico.