Según la documentación de Microsoft , para la función:
ISNULL(check_expression, replacement_value)
replacement_value
debe ser de un tipo que sea implícitamente convertible al tipo de check_expression
. Tenga en cuenta que escriba para 'xy'+NULL
es VARCHAR(3)
. Debido a esto, su cadena 'ABCDEFGHIJ'
se convierte en VARCHAR(3)
y así recortado.
Suena extraño por qué no es VARCHAR(2)
, pero así son las cosas:un carácter más largo que 'xy'
. Puedes jugar con este SQLFiddle
y vea por sí mismo ese tipo de 'xy'+NULL
es lo mismo que para la expresión CASE WHEN 1=2 THEN 'XYZ' ELSE NULL END
, que es NULL
pero es implícitamente compatible con VARCHAR(3)
.
Parece que para la expresión 'xy'+NULL
la longitud percibida se puede calcular como 'xy'
longitud de la cadena (2) más 1 por cada NULL
adicional. Por ejemplo, escriba 'xy'+NULL+NULL
es VARCHAR(4)
, escribe para 'xy'+NULL+NULL+NULL
es VARCHAR(5)
y así sucesivamente:consulte este SQLFiddle
. Esto es extremadamente extraño, pero así es como funcionan MS SQL Server 2008 y 2012.