Quegli utenti tornano ma tornano come null per tutte le colonne restituite nelle tabelle in cui il join sinistro non ha trovato un join corretto.
A causa del modo in cui funzionano i valori null ANSIb4_.ACTIVE=1 non sarà valido per questi record perché null <> 1
Prova a ristrutturare il tuo blocco where come segue:
AND (b4_.ACTIVE=1 or b4_.ACTIVE is null)
AND (B4_.STATUS='A' or B4_.STATUS is null)
AND (UB2_.VISIBLE=1 or UB2_.VISIBLE is null)
and (bl3_.ACTIVE=1 or bl3_.ACTIVE is null)
Un altro modo per affrontare questo problema è aggiungere i prerequisiti ai join di sinistra. Puoi fare come ho fatto di seguito ed escluderà i badge in cui ATTIVO <> 1 escluderà i badge danneggiati e restituirà comunque tutti gli utenti.
left outer join
REWARD.BADGES b4_
on bl3_.BADGEID=b4_.ID
AND b4_.ACTIVE=1