Il peut s'agir de : tous les types de données seront convertis au plus haut niveau basé sur " précédence du type de données règles ".
Logiquement, x in (a,b,c)
est en fait x=a or x=b or x=c
bien sûr. Ceci est pertinent pour ce cas inventé utilisant des valeurs scalaires. I Je ne sais vraiment pas si toutes les valeurs sont CAST en float (la plus élevée ici) avant la comparaison ( ..IN..
) ou par comparaison ( ..OR..OR..
)
WHERE
CAST(1 AS int) IN ('1', CAST(1.0 AS float), 1.0 /*decimal*/)
Pour une sous-requête dans la clause IN, alors la clause colonne a un type de données qui sera CAST selon les règles scalaires
Editer, après le commentaire :
Tous les types de données seront implicitement CAST
SELECT TOP 1 *
FROM sys.columns
WHERE
1 IN (SELECT CAST('1' AS CHAR(1)) FROM sys.columns)
o
DECLARE @intvar int = 1, @charvar char(1) = '1';
SELECT TOP 1 *
FROM sys.columns
WHERE
@intvar IN (SELECT @charvar FROM sys.columns)