I'm assuming that by "lock everyone who hasn't logged in for 90 days" you include users that never logged in. These won't appear in your audit trail. So you need to join to dba_users to see these.
Thinking about it, a not exists may be better:
select * from dba_users u
where not exists (
select null from dba_audit_trail t
where action_name = 'LOGON'
and u.username = t.username
having max(timestamp) > sysdate - 90
)