diff --git a/django/db/models/sql/query.py b/django/db/models/sql/query.py
index c3c8e55..8f74b1d 100644
--- a/django/db/models/sql/query.py
+++ b/django/db/models/sql/query.py
@@ -1882,7 +1882,7 @@ class Query(object):
         if self.alias_map[self.tables[pos + 1]].join_type != self.LOUTER:
             select_fields = [r[0] for r in join_field.related_fields]
             select_alias = self.tables[pos + 1]
-            self.unref_alias(self.tables[pos])
+            # self.unref_alias(self.tables[pos])
             extra_restriction = join_field.get_extra_restriction(
                 self.where_class, None, self.tables[pos + 1])
             if extra_restriction:
diff --git a/tests/queries/tests.py b/tests/queries/tests.py
index 338ec06..a8a87b8 100644
--- a/tests/queries/tests.py
+++ b/tests/queries/tests.py
@@ -99,6 +99,30 @@ class Queries1Tests(BaseQuerysetTest):
         # So, 'U0."id"' is referenced twice.
         self.assertTrue(str(qs4.query).lower().count('u0'), 2)
 
+    def test_ticket_18726(self):
+        a = ObjectA.objects.create(name="alpha")
+        b = ObjectB.objects.create(name="beta", objecta=a, num=int())
+        c = ObjectC.objects.create(name="charlie", objectb=b, objecta=None)
+
+        def test(*args, **kwds):
+            ObjectB.objects.filter(*args, **kwds).count()
+            try: ObjectB.objects.exclude(*args, **kwds).count()
+            except DatabaseError as e: self.fail(repr(e))
+
+        test(objecta__objectb__name='beta')
+        test(objectc__objectb__name=F('name'))
+        #test(objecta__objectb__name=F('name'))
+
+        test(objecta__objectb__name=F('objecta__name'))
+        test(objecta__objectb__name=F('objecta__objectb__name'))
+        test(objecta__objectb__name=F('objectc__objectb__name'))
+        test(objecta__objectb__name=F('objectc__objectb__objecta__name'))
+        #test(objecta__objectb__name=F('objectc__name'))
+
+        test(name=F('objecta__objectb__name'))
+        test(objecta__name=F('objecta__objectb__name'))
+        #test(objectc__name=F('objecta__objectb__name'))
+
     def test_ticket1050(self):
         self.assertQuerysetEqual(
             Item.objects.filter(tags__isnull=True),
