Да, SQL Server автоматически преобразует (расширяет, преобразует) varchar в nvarchar, поэтому в этом случае вы можете удалить N. Конечно, если вы указываете строковый литерал, где символы на самом деле отсутствуют в сопоставлении по умолчанию для базы данных, тогда вам это нужно.
Как будто вы можете добавить суффикс числа к «L» в C et al, чтобы указать, что это длинный литерал вместо целого. Написание N'IBM 'является точным или рабским привычкой, в зависимости от вашей точки зрения.
Одна ловушка для неосторожных: nvarchar не конвертируется автоматически в varchar, и это может быть проблемой, если все ваше приложение - Unicode, а база данных - нет. Например, у нас это было с драйвером jTDS JDBC, который связывал все значения параметров как nvarchar, что приводило к таким операторам, как этот:
select * from purchase where purchase_reference = N'AB1234'
(где purchase_reference был столбцом varchar)
Поскольку автоматические преобразования являются только одним способом, это стало:
select * from purchase where CONVERT(NVARCHAR, purchase_reference) = N'AB1234'
и, следовательно, индекс purchase_reference не использовался.
И наоборот, все в порядке: если purchase_reference был nvarchar и приложение передавало параметр varchar, то переписанный запрос:
select * from purchase where purchase_reference = CONVERT(NVARCHAR, 'AB1234')
было бы хорошо. В конце концов нам пришлось отключить параметры привязки как Unicode, что вызвало массу проблем с i18n, которые считались менее серьезными.