diff --git a/program/filters.py b/program/filters.py
index 0ae95121b4c991b790fe90a0740421f4cdd83cee..f530bf1de61e0a58503cd3333276baa0b2e97c40 100644
--- a/program/filters.py
+++ b/program/filters.py
@@ -299,7 +299,8 @@ class EpisodeFilterSet(StaticFilterHelpTextMixin, filters.FilterSet):
         field_name="timeslots",
         help_text="Return only episodes that belong to the specified timeslot(s).",
     )
-    has_timeslots = filters.BooleanFilter(
+    has_timeslots = StaticQueryBooleanFilter(
+        query=Exists(models.TimeSlot.objects.filter(episode=OuterRef("pk"))),
         label="Has timeslots",
         help_text="Returns only timeslots that either have or have not any timeslots.",
     )
diff --git a/program/views.py b/program/views.py
index e01476a3197004ea639a5717da79fa9c9a4b526a..cc84c93415ab4e92cb435488bd62dc20dc3f087e 100644
--- a/program/views.py
+++ b/program/views.py
@@ -46,7 +46,6 @@ from rest_framework.response import Response
 from django.conf import settings
 from django.contrib.auth.models import User
 from django.db import IntegrityError
-from django.db.models import Q
 from django.http import HttpResponseRedirect, JsonResponse
 from django.shortcuts import get_object_or_404
 from django.utils import timezone
@@ -1449,7 +1448,7 @@ class EpisodeOwnershipPermission(ShowOwnershipPermission):
     destroy=extend_schema(summary="Delete an existing episode."),
 )
 class APIEpisodeViewSet(viewsets.ModelViewSet):
-    queryset = Episode.objects.all().annotate(has_timeslots=Q(timeslots__isnull=True)).distinct()
+    queryset = Episode.objects.all()
     pagination_class = LimitOffsetPagination
     serializer_class = EpisodeSerializer
     filter_backends = [DjangoFilterBackend, drf_filters.SearchFilter]