Известно поведение
От MSDN
Значение check_expression возвращается, если это не NULL; в противном случае replace_value возвращается после того, как он неявно преобразован в тип check_expression, если типы разные. replace_value может быть усечено, если значение replace_value больше, чем check_expression.
Использование COALESCE
к по прибывшему этому вопросу
SELECT COALESCE(a, b) From yourtable
Вот демо
CREATE TABLE #nulltest
(
a CHAR(5),
b CHAR(10)
)
INSERT INTO #nulltest
VALUES ('12345','1234567890'),
(NULL,'1234567890')
SELECT a,
b,
ISNULL(a, b) AS Isnull_Result,
COALESCE(a, b) AS Coalesce_Result
FROM #nulltest
Результат:
╔═══════╦════════════╦═══════════════╦═════════════════╗
║ a ║ b ║ Isnull_Result ║ Coalesce_Result ║
╠═══════╬════════════╬═══════════════╬═════════════════╣
║ 12345 ║ 1234567890 ║ 12345 ║ 12345 ║
║ NULL ║ 1234567890 ║ 12345 ║ 1234567890 ║
╚═══════╩════════════╩═══════════════╩═════════════════╝
Проверьте, есть ли какая-либо переменная Объявлено только с размером 5 ... –