Qualificazione dei nomi delle colonne nelle sottoquery

Nell'esempio seguente la colonna CustomerID specificata nella clausola WHERE della query esterna viene qualificata in modo implicito con il nome della tabella indicato nella clausola FROM della query esterna, ovvero Sales.Store. Il riferimento a CustomerID nell'elenco di selezione della subquery viene qualificato dalla clausola FROM della subquery stessa, ovvero dalla tabella Sales.Customer.

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

Come regola generale, i nomi delle colonne inclusi in un'istruzione vengono qualificati in modo implicito dalla tabella cui viene fatto riferimento nella clausola FROM allo stesso livello. Se non è disponibile una colonna nella tabella cui viene fatto riferimento nella clausola FROM di una subquery, la colonna viene qualificata in modo implicito dalla tabella cui viene fatto riferimento nella clausola FROM della query esterna.

Di seguito viene riportata una query che include le qualificazioni implicite specificate:

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

È comunque consigliabile specificare sempre il nome della tabella in modo esplicito. È inoltre sempre possibile sostituire i presupposti impliciti relativi ai nomi delle tabelle con qualificazioni esplicite.

Nota di attenzioneAttenzione

Se a una colonna viene fatto riferimento in una subquery che non è disponibile nella tabella cui viene fatto riferimento nella clausola FROM della subquery, ma che è invece disponibile in una tabella cui viene fatto riferimento nella clausola FROM della query esterna, la query viene eseguita senza errori. Tramite SQL Server la colonna viene qualificata in modo implicito nella subquery con il nome della tabella indicato nella query esterna.