«NULL» имеет особое значение, а SQL требует особой обработки. Вы не можете сравнить значение с «NULL», поэтому есть специальный оператор IS (NOT) NULL, чтобы проверить его. Исчерпывающее объяснение заняло бы некоторое место, здесь простое объяснение.
С "математической" точки зрения NULL можно рассматривать как "бесконечность". Вы не можете легко сравнить два бесконечных значения, например, подумайте о наборе целых чисел и даже чисел. Оба бесконечны, но кажется логичным, что первое больше второго. Все, что вы можете сказать, это то, что оба множества бесконечны.
Это также помогает объяснить, например, почему 1 + NULL возвращает NULL и т. Д. (Обычно только агрегатные функции, такие как SUM () и т. Д. Могут игнорировать значения NULL - игнорировать, а не превращать NULL в нули).
Эта метафора может не соответствовать действительности при сортировке, поскольку некоторые базы данных предпочитают считать NULL меньше любого значения (некоторый вид -infinity и, таким образом, возвращать их сначала в порядке возрастания), а наоборот. У некоторых есть возможность указать, где возвращать NULL.
Проверьте документацию базы данных об NULL-арифметике и сравнениях NULL. field = NULL никогда не должен был использоваться, не знаю, принимает ли его Sybase, но большинство реализаций SQL этого не делают, и я предполагаю, что он не соответствует стандартам SQL. Гораздо лучше привыкнуть к синтаксису IS (NOT) NULL.
Обновление : Sybase имеет опцию "set ansinull" из документации (всегда RTFM!), В 12.5.1 она была расширена для запрета синтаксиса '= NULL' (если установлено значение ON, чтобы сделать его совместимым со стандартами SQL). При значении OFF '= NULL' работает как 'IS NULL'.
Возможно, SQL Links или провайдер ADO установили одно или другое значение.