See code below. Does SQL Server optimize the right-hand-side formula of the expression to only evaluate it once? Or does it needlessly execute it for every single row? The RHS is essentially a constant in this case and won't change on a per-row basis.
Sounds like in these situations it's better to store the value in a @variable ahead of time then just reference the @variable in the WHERE clause.
select MyColumn from MyTable where SomeColumn < cast(cast(getdate() as int) as smalldatetime)