Причина в том, что весь оператор - if и его "истинная" часть скомпилированы как единое целое.
Если таблица существует во время компиляции - ошибка.
Таким образом, вы можете поместить CREATE TABLE
оператор в динамическое состояние sqlmetn EXEC('CREATE TABLE....')
Тогда все, что Sybase видит при компиляции:
IF object_id('mytab') IS NULL
EXEC('something or other')
Содержимое EXEC
не компилируется до выполнения, когда вызнаю, что нет стола и все хорошо.