--- django/tests/modeltests/m2m_through/models.py
+++ django/tests/modeltests/m2m_through/models.py
@@ -16,6 +16,11 @@ class Person(models.Model):
         return self.name

 @python_2_unicode_compatible
+class Relationship(models.Model):
+    from_person = models.ForeignKey(Person, related_name='idols')
+    to_person = models.ForeignKey(Person, related_name='followers')
+
+@python_2_unicode_compatible
 class Group(models.Model):
     name = models.CharField(max_length=128)
     members = models.ManyToManyField(Person, through='Membership')
--- django/tests/modeltests/m2m_through/tests.py
+++ django/tests/modeltests/m2m_through/tests.py
@@ -5,7 +5,7 @@ from operator import attrgetter

 from django.test import TestCase

-from .models import (Person, Group, Membership, CustomMembership,
+from .models import (Relationship, Person, Group, Membership, CustomMembership,
     PersonSelfRefM2M, Friendship)


@@ -343,3 +343,11 @@ class M2mThroughTests(TestCase):
             ],
             attrgetter("name")
         )
+
+    def test_ticket_20535_m2m_trim(self):
+        qs = Relationship.objects.filter(from_person__followers__from_person=self.bob)
+        self.assertEqual(str(qs.query).count('JOIN'), 1)
+
+    def test_ticket_20535_m2m_no_trim(self):
+        qs = Relationship.objects.filter(from_person__followers__from_person=self.bob, from_person__name='Jane')
+        self.assertEqual(str(qs.query).count('JOIN'), 2)
