Vários níveis de aninhamento
Uma subconsulta pode incluir uma ou mais subconsultas. Qualquer número de subconsultas pode ser aninhado em uma instrução.
A seguinte consulta localiza os nomes de funcionários que também são vendedores.
Use AdventureWorks;
GO
SELECT LastName, FirstName
FROM Person.Contact
WHERE ContactID IN
(SELECT ContactID
FROM HumanResources.Employee
WHERE EmployeeID IN
(SELECT SalesPersonID
FROM Sales.SalesPerson)
Conjunto de resultados.
LastName FirstName
-------------------------------------------------- -----------------------
Jiang Stephen
Abbas Syed
Alberts Amy
Ansman-Wolfe Pamela
Campbell David
Carson Jillian
Ito Shu
Mitchell Linda
Reiter Tsvi
Saraiva Jos
Vargas Garrett
Varkey Chudukatil Ranjit
Valdez Rachel
Tsoflias Lynn
Pak Jae
Blythe Michael
Mensa-Annan Tete
(17 row(s) affected)
A consulta mais interna retorna a ID dos vendedores. A consulta no nível superior próximo é avaliada com essa ID de vendedor e retorna os números de ID de contato dos funcionários. Finalmente, a consulta externa usa a ID de contato para localizar os nomes dos funcionários.
Você também pode expressar esta consulta como uma junção:
USE AdventureWorks;
GO
SELECT LastName, FirstName
FROM Person.Contact c
INNER JOIN HumanResources.Employee e
ON c.ContactID = e.ContactID
JOIN Sales.SalesPerson s
ON e.EmployeeID = s.SalesPersonID