Subconsultas com aliases
Várias instruções nas quais a subconsulta e a consulta externa se referem à mesma tabela podem ser especificadas como autojunções (associando uma tabela a ela mesma). Por exemplo, você pode localizar funcionários que tenham o mesmo gerente, como Terri Duffy, usando uma subconsulta:
USE AdventureWorks;
GO
SELECT EmployeeID, ManagerID
FROM HumanResources.Employee
WHERE ManagerID IN
(SELECT ManagerID
FROM HumanResources.Employee
WHERE EmployeeID = 12)
Conjunto de resultados.
EmployeeID ManagerID
----------- -----------
6 109
12 109
21 109
42 109
140 109
148 109
273 109
(7 row(s) affected)
Ou, você pode usar uma autojunção:
USE AdventureWorks;
GO
SELECT e1.EmployeeID, e1.ManagerID
FROM HumanResources.Employee AS e1
INNER JOIN HumanResources.Employee AS e2
ON e1.ManagerID = e2.ManagerID
AND e2.EmployeeID = 12
São necessários aliases de tabela porque a tabela que é unida a ela mesma aparece em duas diferentes funções. Os aliases também podem ser utilizados em consultas aninhadas que se referem à mesma tabela em uma consulta interna e externa.
USE AdventureWorks;
GO
SELECT e1.EmployeeID, e1.ManagerID
FROM HumanResources.Employee AS e1
WHERE e1.ManagerID IN
(SELECT e2.ManagerID
FROM HumanResources.Employee AS e2
WHERE e2.EmployeeID = 12)
Os aliases explícitos deixam claro que a referência a HumanResources.Employee na subconsulta não significa a mesma coisa que a referência da consulta externa.