DECLARE @msg NVARCHAR(4000);
DECLARE @str1 NCHAR(1);
SET @msg = N'@str1 is ' + ISNULL (@str1, N'not defined');
@str1 is n
Only those who read BOL or http://msdn.microsoft.com/en-us/library/ms184325.aspx very carefully will understand that this is documented behavior. You need to explicitly tell people that if the replacement_value is longer than check_expression, it will be truncated to the length of the check_expression.
There are many database developers who don't understand this after reading the documentation.