По той простой причине, что триггер содержит любую логику, которую вы хотите иметь в нем.
Например, если триггер имел:
if :new.start_date > sysdate + 1 then
select ... [my bad dml that would cause a mutating table error]
end if;
тогда он не должен компилироваться? Насколько нам известно, условие IF никогда не может быть оценено как истинное, и этот нарушающий DML никогда не будет запущен.