Elegir todas las columnas
El asterisco (*) tiene los siguientes significados especiales en las instrucciones SELECT:
Cuando se especifica sin ningún calificador, un asterisco (*) se resuelve como una referencia a todas las columnas de todas las tablas o vistas especificadas en la cláusula FROM. En el siguiente ejemplo, se recupera toda la información de productos almacenada en la tabla Product:
USE AdventureWorks2008R2; GO SELECT * FROM Production.Product ORDER BY Name; GO
Cuando se califica con el nombre de una tabla o vista, un asterisco (*) se resuelve como una referencia a todas las columnas de la tabla o vista. En el ejemplo siguiente, se usa el asterisco para hacer referencia a todas las columnas de la tabla 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
Cuando se usa un asterisco (*), el orden de las columnas del conjunto de resultados es el mismo que el orden en el que se especificaron en las instrucciones CREATE TABLE, ALTER TABLE o CREATE VIEW.
Puesto que SELECT * busca todas las columnas que se encuentran actualmente en una tabla, los cambios en la estructura de una tabla (agregar, quitar o cambiar el nombre de columnas) quedan reflejados automáticamente cada vez que se ejecuta una instrucción SELECT *.
Si se usa una instrucción SELECT en una aplicación o script en la que la lógica depende del número de columnas del conjunto de resultados, es mejor especificar todas las columnas de la lista de selección en lugar de especificar un asterisco. Si posteriormente se agregan a la tabla columnas o vistas a las que hace referencia la instrucción SELECT, la aplicación estará protegida contra el cambio si las columnas se enumeraron individualmente. Si se especificó un asterisco (*), las nuevas columnas se convierten en parte del conjunto de resultados y pueden afectar a la lógica de la aplicación o el script. Evite utilizar asteriscos, especialmente con vistas de catálogo, vistas de administración dinámica y funciones con valores de tabla del sistema Puede que en las actualizaciones y versiones futuras de Microsoft SQL Server se agreguen columnas y se cambie su orden para estas vistas y funciones. Es posible que estos cambios provoquen errores en las aplicaciones que esperan un determinado orden y número de columnas.
En el ejemplo siguiente se recuperan todas las columnas de la tabla Customer y se presentan en el orden en el que se definieron cuando se creó la tabla Customer.
USE AdventureWorks2008R2;
GO
SELECT *
FROM Sales.Customer
ORDER BY CustomerID ASC;
GO
Para obtener exactamente los mismos resultados, enumere explícitamente, en orden, todos los nombres de columna de la tabla después de la instrucción SELECT.
USE AdventureWorks2008R2;
GO
SELECT CustomerID, TerritoryID, AccountNumber, rowguid, ModifiedDate
FROM Sales.Customer
ORDER BY CustomerID ASC
GO
Nota
Para ver los nombres de columna de una tabla, utilice o una de las siguientes consultas: SELECT name FROM sys.columns WHERE OBJECT_ID IN (SELECT OBJECT_ID ('table_name')) o SELECT TOP 0 * FROM table_name.