Ao tentar escrever uma consulta, descobri (da maneira mais difícil) que o SQL Server analisa WHEREs em uma consulta muito antes de analisar os SELECTs ao executar uma consulta.
Os documentos do MSDN dizem que a ordem de análise lógica geral é tal que SELECT é analisado quase por último (resultando assim em erros "no such object [alias]" ao tentar usar um alias de coluna em outras cláusulas). Houve até uma sugestão para permitir o uso de aliases em qualquer lugar, que foi abatida pela equipe da Microsoft, citando problemas de conformidade com os padrões ANSI (o que sugere que esse comportamento faz parte do padrão ANSI).
Como programador (não um DBA), achei esse comportamento um tanto confuso, já que me parece que ele anula em grande parte o propósito de ter aliases de coluna (ou, pelo menos, aliases de coluna poderiam ser significativamente mais poderosos se fossem analisado anteriormente na execução da consulta), já que o único lugar onde você pode realmente usar os aliases é em ORDER BY. Como programador, parece que está perdendo uma grande oportunidade de tornar as consultas mais poderosas, convenientes e DRY.
Parece que é um problema tão evidente que é lógico, então, que existem outras razões para decidir que aliases de coluna não devem ser permitidos em nada além de SELECT e ORDER BY, mas quais são essas razões?