Qualificando nomes de coluna em subconsultas
No exemplo a seguir, a coluna CustomerID na cláusula WHERE da consulta externa está implicitamente qualificada pelo nome da tabela na cláusula FROM da consulta externa, Sales.Store. A referência ao CustomerID na lista de seleção da subconsulta está qualificada pela cláusula FROM da subconsulta, ou seja, pela tabela Sales.Customer.
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Sales.Store
WHERE BusinessEntityID NOT IN
(SELECT CustomerID
FROM Sales.Customer
WHERE TerritoryID = 5)
A regra geral é que os nomes de coluna em uma instrução sejam implicitamente qualificados pela tabela referenciada na cláusula FROM no mesmo nível. Se a coluna não existir na tabela referenciada na cláusula FROM de uma subconsulta, ela será qualificada implicitamente pela tabela referenciada na cláusula FROM da consulta externa.
Eis como a consulta se parece com as suposições implícitas especificadas:
USE AdventureWorks2008R2;
GO
SELECT Name
FROM Sales.Store
WHERE Sales.Store.BusinessEntityID NOT IN
(SELECT Sales.Customer.CustomerID
FROM Sales.Customer
WHERE TerritoryID = 5)
Nunca é errado declarar o nome de tabela explicitamente e sempre é possível substituir as suposições implícitas sobre nomes de tabela com qualificações explícitas.
Cuidado |
---|
Se uma coluna for referenciada em uma subconsulta que não existir na tabela referenciada pela cláusula FROM da subconsulta, mas existir em uma tabela referenciada pela cláusula FROM da consulta externa, a consulta será executada sem erro. O SQL Server qualifica a coluna implicitamente na subconsulta com o nome de tabela na consulta externa. |
Consulte também