Hay casos en los que no puede evitar una subconsulta, por ejemplo, si tiene que incluir columnas calculadas que usan datos de la fila actual y la anterior. Considere esta consulta, por ejemplo:
SELECT
(Current.Mileage - Last.Mileage)/Quantity as MPG
FROM
GasPurchases AS Current
LEFT OUTER JOIN GasPurchases AS Last
ON Last.Date =
(SELECT MAX(PurchaseDate)
FROM GasPurchases
WHERE PurchaseDate < Current.PurchaseDate)
Provocará un error de análisis:
Encontré este hilo en MSDN que tiene una solución. Al cambiar la subconsulta para que devuelva un conjunto en lugar de un valor escalar, pude guardar y ejecutar la siguiente consulta.
SELECT
(Current.Mileage - Last.Mileage)/Quantity as MPG
FROM
GasPurchases AS Current
LEFT OUTER JOIN GasPurchases AS Last
ON Last.Date IN
(SELECT MAX(PurchaseDate)
FROM GasPurchases
WHERE PurchaseDate < Current.PurchaseDate)