A consulta a seguir usa a mesma ideia que nesta resposta incrível do ypercube :
SELECT x.*
FROM (SELECT NULL AS SomeCol) AS dummy
CROSS APPLY
(
SELECT
ID,
SomeCol AS MyTest
FROM dbo.Customers
) AS x;
Funciona assim:
Se dbo.Customers
tem uma coluna chamada SomeCol
, em seguida, SomeCol
em SomeCol AS MyTest
resolverá como dbo.Customers.SomeCol
;
se a tabela não possuir essa coluna, a referência ainda será válida, porque agora será resolvida como dummy.SomeCol
: as dummy
colunas podem ser referenciadas nesse contexto.
Você pode especificar várias colunas "sobressalentes" dessa maneira. O truque é não usar o alias da tabela para essas colunas (que é uma prática desaprovada na maioria das situações, mas, nesse caso, a omissão do alias da tabela ajuda a resolver o problema).
Se a tabela for usada em uma junção e a outra tabela tiver sua própria SomeCol
, você provavelmente precisará usar a consulta acima como uma tabela derivada antes de usá-la na junção para manter o truque funcionando, algo como isto:
SELECT ...
FROM
(
SELECT x.*
FROM (SELECT NULL AS SomeCol) AS dummy
CROSS APPLY (
SELECT
ID,
SomeCol AS MyTest
FROM dbo.Customers
) AS x
) AS cust
INNER JOIN ...
;