diff --git a/django/db/models/sql/compiler.py b/django/db/models/sql/compiler.py
index 38806e7..b655990 100644
--- a/django/db/models/sql/compiler.py
+++ b/django/db/models/sql/compiler.py
@@ -647,9 +647,17 @@ class SQLCompiler(object):
                                else None)
                 columns, aliases = self.get_default_columns(start_alias=alias,
                     opts=model._meta, as_pairs=True, from_parent=from_parent)
+                
+                fields = []
+                for field, field_model in model._meta.get_concrete_fields_with_model():
+                    if from_parent and field_model is not None and issubclass(from_parent, field_model):
+                        # Avoid loading data for already loaded parents.
+                        continue
+                    fields.append(field)
+
                 self.query.related_select_cols.extend(
                     SelectInfo(col, field) for col, field
-                    in zip(columns, model._meta.concrete_fields))
+                    in zip(columns, fields))
                 next = requested.get(f.related_query_name(), {})
                 self.fill_related_selections(model._meta, alias, cur_depth + 1,
                                              next, restricted)
diff --git a/tests/select_related_regress/models.py b/tests/select_related_regress/models.py
index c2611b4..102f1e8 100644
--- a/tests/select_related_regress/models.py
+++ b/tests/select_related_regress/models.py
@@ -154,3 +154,12 @@ class C(Base):
     c_a = models.ForeignKey(A)
     c_b = models.ForeignKey(B)
     is_published = models.BooleanField(default=False)
+    
+
+class Place(models.Model):
+    name = models.CharField(max_length=50)
+    address = models.CharField(max_length=80)
+
+class Restaurant(Place):
+    serves_hot_dogs = models.BooleanField(default=False)
+    serves_pizza = models.BooleanField(default=False)
diff --git a/tests/select_related_regress/tests.py b/tests/select_related_regress/tests.py
index 78d5838..9f80667 100644
--- a/tests/select_related_regress/tests.py
+++ b/tests/select_related_regress/tests.py
@@ -5,7 +5,7 @@ from django.utils import six
 
 from .models import (Building, Child, Device, Port, Item, Country, Connection,
     ClientStatus, State, Client, SpecialClient, TUser, Person, Student,
-    Organizer, Class, Enrollment, Hen, Chick, A, B, C)
+    Organizer, Class, Enrollment, Hen, Chick, A, B, C, Place, Restaurant)
 
 
 class SelectRelatedRegressTests(TestCase):
@@ -188,3 +188,11 @@ class SelectRelatedRegressTests(TestCase):
             self.assertEqual(qs_c.c_b.lots_of_text, 'lots_of_text_b')
             self.assertEqual(qs_c.c_a.name, 'a')
             self.assertEqual(qs_c.c_b.name, 'b')
+            
+    def test_ticket_21413(self):
+        Restaurant.objects.create(name='Bobs Cafe', address="Somewhere", 
+            serves_pizza=True, serves_hot_dogs=True)
+        restaurant = Place.objects.all().select_related('restaurant')[0].restaurant
+        self.assertIsInstance(restaurant.serves_pizza, bool)
+        self.assertIsInstance(restaurant.serves_hot_dogs, bool)
+    
