This...
where p.DivisionCode in ('$','1','2','{','#','L','6','t','[')
and p.PSIKey in ('1','2','3','4' ,'5','6','7','8','12','13','14','15','16','17','18','19','20','21')
... is turning your outer join into an inner join. Try putting those two conditions in the join predicate instead.
John