diff --git a/src/core/models/conference.py b/src/core/models/conference.py
index 0b8be5714120146fe5d6d130bfbb1d53cdcc2abd..f1d5bbe2abbf68f5255a0c6949fbb7cf364f62c1 100644
--- a/src/core/models/conference.py
+++ b/src/core/models/conference.py
@@ -179,14 +179,12 @@ class ConferenceManager(models.Manager):
             return qs
 
         # limit on the public ones
-        qs = qs.filter(is_public=True)
+        public_query = qs.filter(is_public=True).values('id')
 
         # for logged-in members, add all non-public conferences in which the user has the staff flag set
-        conf_ids = ConferenceMember.objects.filter(user=user, is_staff=True, conference__is_public=False).values_list('conference_id', flat=True)
-        if len(conf_ids) > 0:
-            qs = qs.union(self.get_queryset().filter(id__in=conf_ids))
+        conf_staff_query = ConferenceMember.objects.filter(user=user, is_staff=True, conference__is_public=False).values('conference_id')
 
-        return qs
+        return qs.filter(id__in=public_query.union(conf_staff_query))
 
     def public_accessible(self):
         return self.get_queryset().filter(is_public=True)