Le tue condizioni dovrebbero far parte della clausola LEFT JOIN ... ON.
$q = $this->createQuery('c')
->leftJoin('c.stJob j WITH j.expires_at > ? AND j.is_activated = 1 AND j.is_public = 1', date('Y-m-d h:i:s', time()))
->addOrderBy('c.name');
Mettere le condizioni in ON clausola (al contrario di WHERE ) indica che si applicano specificamente al JOIN . Se nessuna riga soddisfa queste condizioni, non c'è alcun join, ed è proprio quello che vuoi in questo caso. Mettendoli nel WHERE indica che il risultato le righe devono soddisfare tali condizioni. E ovviamente se non c'è stato un join, non puoi soddisfare nessuno condizioni relative a j tabella.