Escolhendo todas as colunas

O asterisco (*) tem os seguintes significados especiais em instruções SELECT:

  • Quando especificado sem um qualificador, um asterisco (*) é resolvido como uma referência a todas as colunas em todas as tabelas ou exibições especificadas na cláusula FROM. O exemplo a seguir recupera todas as informações de produto armazenadas na tabela Product:

    USE AdventureWorks2008R2;
    GO
    SELECT *
    FROM Production.Product
    ORDER BY Name;
    GO
    
  • Quando qualificado com uma tabela ou nome para exibição, um asterisco (*) é resolvido como uma referência a todas as colunas na tabela ou exibição. O seguinte exemplo usa o asterisco como referência a todas as colunas da tabela Product:

    USE AdventureWorks2008R2;
    GO
    SELECT s.UnitPrice, p.*
    FROM Production.Product p
       JOIN
         Sales.SalesOrderDetail s
       ON (p.ProductID = s.ProductID)
    ORDER BY p.ProductID;
    GO
    

Quando um asterisco (*) for usado, a ordem das colunas no conjunto de resultados será igual à ordem na qual eles foram especificados nas instruções CREATE TABLE, ALTER TABLE ou CREATE VIEW.

Como SELECT * encontra todas as colunas que estão atualmente em uma tabela, mudanças na estrutura de uma tabela (somando, removendo ou renomeando colunas) são refletidas automaticamente cada vez que uma instrução de SELECT * é executada.

Se SELECT for usado em um aplicativo ou script que tenha dependência lógica no número de colunas do conjunto de resultados, será melhor especificar todas as colunas na lista de seleção em vez de especificar um asterisco. Posteriormente, se colunas forem adicionadas à tabela ou exibições consultadas pela instrução SELECT, o aplicativo será protegido contra alteração se as colunas forem listadas individualmente. Se for especificado um asterisco (*), as colunas novas se tornarão uma parte do conjunto de resultados e poderão afetar a lógica do aplicativo ou script. Deve-se evitar o uso do asterisco (*), especialmente em exibições do catálogo, exibições de administração dinâmicas e funções do sistema com valor de tabela. Atualizações e versões futuras do Microsoft SQL Server podem somar colunas e alterar a ordem das colunas nessas exibições e funções. Essas mudanças podem interromper aplicativos que esperam uma ordem e um número de colunas específicos.

O exemplo a seguir recupera todas as colunas na tabela Customer e as exibe na ordem em que estavam definidas quando a tabela Customer foi criada.

USE AdventureWorks2008R2;
GO
SELECT *
FROM Sales.Customer
ORDER BY CustomerID ASC;
GO

Para obter exatamente os mesmos resultados, liste explicitamente todos os nomes de coluna na tabela, em ordem, depois da instrução de SELECT.

USE AdventureWorks2008R2;
GO
SELECT CustomerID, TerritoryID, AccountNumber, rowguid, ModifiedDate
FROM Sales.Customer
ORDER BY CustomerID ASC
GO
ObservaçãoObservação

Para exibir os nomes de coluna de uma tabela, você pode usar sp_help ou uma das consultas seguintes: SELECT name FROM sys.columns WHERE OBJECT_ID IN (SELECT OBJECT_ID ('table_name')) ou SELECT TOP 0 * FROM table_name.

Consulte também

Referência