If there's nothing in t, your query will still return row with a null value. So you can nvl your listagg to show something else:
drop table t purge;
create table t ( st_dt date, en_dt date );
with dts as (
select date'2016-03-01' + rownum - 1 d from dual
connect by level <= (select max(en_dt)-min(st_dt)+1 from t)
)
select nvl(
LISTAGG(to_char(d, 'yyyy-mm-dd'), ',' ) WITHIN GROUP (ORDER BY d),
'1990-01-01'
) dt
from dts
join t
on d between st_dt and en_dt;
DT
-----------
1990-01-01