Hola Nicolás,
Todos los campos en SQL son de un cierto tipo de datos. Hay muchos tipos diferentes, pero todos caen principalmente en tres categorías: texto, números, fechas.
Cuando comparas dos campos, o un campo con un valor de parámetro, el tipo de datos de ambos valores debe coincidir, y los valores en una columna deben ser todos del mismo tipo de datos.
SQL Server siempre intentará automáticamente convertir uno u otro valor para que coincidan. Cuando los tipos de datos son de la misma categoría, generalmente no hay problema. Sin embargo, cuando uno de los valores está en una categoría diferente, SQL Server solo puede realizar ciertas conversiones automáticamente, y algunas puede hacerlas cuando le indicas explícitamente que lo haga.
Cuando tu consulta contiene una columna que se crea programáticamente, como la parte roja de tu consulta, SQL Server mirará los primeros valores y tratará de determinar cuál es el tipo de datos.
En tu consulta original, la declaración CASE devuelve valores numéricos, excepto la primera cláusula WHEN, como encontró Juan Carlos. '' es una cadena vacía, en otras palabras, texto. Entonces, lo que SQL Server encontró fue algo así:
fila 1 valor 1 --> un número
fila 2 valor 10
--> un número
fila 3 valor 5
--> un número
fila 4 valor 132
--> un número
ok, claro, esta columna contiene valores numéricos
fila 5 valor 164
--> un número
etc
fila 12 valor ''
--> texto
ese tipo de datos no encaja
--> lanzar el error
Saludos,
Johan