Partilhar via


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.

Observação sobre cuidadosCuidado

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.