Martin ha fornito questo collegamento che spiega praticamente cosa sta succedendo:Query Optimizer ha libero sfogo per riordinare le cose come preferisce. Includo questo come risposta in modo da poter accettare qualcosa. Martin, se crei una risposta con il tuo link, lo accetterò volentieri invece di questo.
Voglio lasciare la mia domanda qui perché penso che sia difficile da cercare e la mia particolare formulazione del problema potrebbe essere più facile da trovare per qualcun altro in futuro.
TSQL dividi per zero rilevato nonostante non ci siano colonne contenenti 0
EDIT:Poiché sono arrivate più risposte, sono di nuovo confuso. Non sembra ancora chiaro quando esattamente l'ottimizzatore sia autorizzato a valutare le cose nella clausola select. Immagino che dovrò cercare io stesso lo standard SQL e vedere se riesco a dargli un senso.