That's not quite true for IQ. What you describe fits perfectly well with ASE.
In IQ, however, a truncate and delete with no where clause are treated the same. They perform the same and are controlled by full transactional control.
Take this script as an example:
drop table if exists trunctst
go
create table trunctst ( a1 int )
go
insert into trunctst values ( 1 )
go 10
select count(*) from trunctst
go
set temporary option chained='on';
begin
truncate table trunctst;
rollback;
end
go
set temporary option chained='off';
go
commit
go
select count(*) from trunctst
go
Immediately after the truncate command is a rollback. When run, both select count(*) statements return 10, the number of rows in the table.
When the rollback is changed to a commit, the second select count(*) returns 0 because the truncate was committed.