Martin deu este link que explica muito bem o que está acontecendo - o otimizador de consulta tem liberdade para reordenar as coisas da maneira que quiser. Estou incluindo isso como uma resposta para que eu possa aceitar algo. Martin, se você criar uma resposta com seu link, aceitarei com prazer que, em vez desta.
Eu quero deixar minha pergunta aqui porque acho que é difícil de pesquisar, e minha formulação específica do problema pode ser mais fácil para outra pessoa encontrar no futuro.
TSQL divisão por zero encontrada apesar de não haver colunas contendo 0
EDIT:À medida que mais respostas chegam, estou novamente confuso. Ainda não parece claro quando exatamente o otimizador pode avaliar coisas na cláusula select. Acho que vou ter que encontrar o padrão SQL e ver se consigo entender isso.