Они могут быть: все типы данных будут преобразованы в наивысшие значения в соответствии с правилами " приоритет типов данных ".
Логически, x in (a,b,c)
на самом деле x=a or x=b or x=c
конечно.Это актуально для этого надуманного случая с использованием скалярных значений.Я действительно не знаю , являются ли все значения CAST для плавания (самое высокое здесь) перед сравнением (..IN..
) или приведением к сравнению (..OR..OR..
)
WHERE
CAST(1 AS int) IN ('1', CAST(1.0 AS float), 1.0 /*decimal*/)
Дляподзапрос в предложении IN, тогда столбец имеет тип данных CAST в соответствии со скалярными правилами
Правка после комментария:
Все типы данных будутнеявно CAST
SELECT TOP 1 *
FROM sys.columns
WHERE
1 IN (SELECT CAST('1' AS CHAR(1)) FROM sys.columns)
или
DECLARE @intvar int = 1, @charvar char(1) = '1';
SELECT TOP 1 *
FROM sys.columns
WHERE
@intvar IN (SELECT @charvar FROM sys.columns)