Pourquoi ai-je un type de données int lors de l'utilisation d'un cas conditionnel?

Considérez l'extrait Sql suivant:

declare @param as int set @param=1 select case when @param=1 then '987' else '' end as Value1, case when @param=2 then 987 else '' end as Value2, case when @param<>2 then '' else 987 end as Value3 

Je m'attendrais à get 1 ligne avec 3 champs: La string 987 et 2 strings vides mais j'obtiens le résultat suivant:

entrez la description de l'image ici

Pouvez-vous m'expliquer pourquoi j'ai une valeur de 0? Je sais que c'est parce que la colonne est interprétée comme un type de données entier mais pas sûr de la raison.

Au moment d'écrire la question, j'ai trouvé la réponse:

Ce comportement est dû à la priorité de type de données

Lorsqu'un opérateur combine deux expressions de types de données différents, les règles de priorité de type de données spécifient que le type de données de priorité inférieure est converti en type de données avec la priorité la plus élevée. Si la conversion n'est pas une conversion implicite prise en charge, une erreur est renvoyée. Lorsque les deux expressions d'opérande ont le même type de données, le résultat de l'opération a ce type de données.

pour plus d'informations

https://msdn.microsoft.com/en-us/library/ms190309.aspx