Abviously @ast is null and Isnull would exchange null with other value, so you shouldn't expect @ast to be not null. If your AppSubType is null , so the result become null but AppSubType=null
doesn't mean because AppSubType is null
is true. Because null is not a value so it cant work with equal.
for your expected result this code will work.
declare @ast varchar(10)
set @ast = null
select *
from tbl
where AppType = 'SC' and (AppSubType = ISNULL(@ast, AppSubType) Or AppSubType is null)