Compartir a través de


Calificar nombres de columna en subconsultas

En el siguiente ejemplo, la columna CustomerID de la cláusula WHERE de la consulta externa está calificada implícitamente por el nombre de tabla de la cláusula FROM de la consulta externa, Sales.Store. La referencia a CustomerID en la lista de selección de la subconsulta está calificada por la cláusula FROM de la subconsulta, es decir, por la tabla Sales.Customer.

USE AdventureWorks;
GO
SELECT Name
FROM Sales.Store
WHERE CustomerID NOT IN
    (SELECT CustomerID
     FROM Sales.Customer
     WHERE TerritoryID = 5)

La regla general es que los nombres de columna de una instrucción están calificados implícitamente por la tabla a la que se hace referencia en la cláusula FROM del mismo nivel. Si una columna no existe en la tabla a la que se hace referencia en la cláusula FROM de una subconsulta, la tabla a la que se hace referencia en la cláusula FROM de la consulta externa la califica implícitamente.

Ésta es la consulta en la que se han especificado estos supuestos implícitos:

USE AdventureWorks;
GO
SELECT Name
FROM Sales.Store
WHERE Sales.Store.CustomerID NOT IN
    (SELECT Sales.Customer.CustomerID
     FROM Sales.Customer
     WHERE TerritoryID = 5)

Nunca está de más indicar explícitamente el nombre de la tabla y siempre se pueden anular los supuestos implícitos acerca de los nombres de tabla con calificaciones explícitas.

Nota de advertenciaAdvertencia

Si se hace referencia a una columna en una subconsulta que no existe en la tabla a la que se hace referencia en la cláusula FROM de la subconsulta, pero que existe en una la tabla a la que se hace referencia en la cláusula FROM de la consulta externa, la consulta se ejecuta sin errores. SQL Server califica implícitamente la columna en la subconsulta con el nombre de la tabla en la consulta externa.