diff --git a/tests/expressions/tests.py b/tests/expressions/tests.py
index 9ecc033b6b..82d8a9f351 100644
--- a/tests/expressions/tests.py
+++ b/tests/expressions/tests.py
@@ -838,6 +838,12 @@ class BasicExpressionsTests(TestCase):
             with self.subTest(conditions):
                 self.assertCountEqual(Employee.objects.filter(conditions), [self.max])
 
+    def test_boolean_expression_in_Q(self):
+        is_poc = Company.objects.filter(point_of_contact=OuterRef('pk'))
+        self.gmbh.point_of_contact = self.max
+        self.gmbh.save()
+        self.assertCountEqual(Employee.objects.filter(Q(Exists(is_poc))), [self.max])
+
 
 class IterableLookupInnerExpressionsTests(TestCase):
     @classmethod
diff --git a/tests/queryset_pickle/tests.py b/tests/queryset_pickle/tests.py
index d0ae963cd9..bf61960419 100644
--- a/tests/queryset_pickle/tests.py
+++ b/tests/queryset_pickle/tests.py
@@ -172,6 +172,17 @@ class PickleabilityTestCase(TestCase):
         m2ms = pickle.loads(pickle.dumps(m2ms))
         self.assertSequenceEqual(m2ms, [m2m])
 
+    def test_pickle_boolean_expression_in_Q__queryset(self):
+        group = Group.objects.create(name='group')
+        Event.objects.create(title='event', group=group)
+        groups = Group.objects.filter(
+            models.Q(models.Exists(
+                Event.objects.filter(group_id=models.OuterRef('id')),
+            )),
+        )
+        groups2 = pickle.loads(pickle.dumps(groups))
+        self.assertSequenceEqual(groups2, [group])
+
     def test_pickle_exists_queryset_still_usable(self):
         group = Group.objects.create(name='group')
         Event.objects.create(title='event', group=group)