Index: django/db/models/sql/query.py
===================================================================
--- django/db/models/sql/query.py	(revision 7534)
+++ django/db/models/sql/query.py	(working copy)
@@ -880,7 +880,7 @@
 
         for f, model in opts.get_fields_with_model():
             if (not f.rel or (restricted and f.name not in requested) or
-                    (not restricted and f.null) or f.rel.parent_link):
+                    (not restricted and f.null)):
                 continue
             table = f.rel.to._meta.db_table
             if model:
@@ -894,13 +894,19 @@
                             promote=f.null)
             else:
                 alias = root_alias
+
+            # For parent links all tables are already joined in "if model:" clause above
+            # Also we don't need to recurse further along parent links
+            if f.rel.parent_link:
+                continue
+
             alias = self.join((alias, table, f.column,
                     f.rel.get_related_field().column), exclusions=used,
                     promote=f.null)
             used.add(alias)
             self.related_select_cols.extend([(alias, f2.column)
-                    for f2 in f.rel.to._meta.fields])
-            self.related_select_fields.extend(f.rel.to._meta.fields)
+                    for f2 in f.rel.to._meta.local_fields])
+            self.related_select_fields.extend(f.rel.to._meta.local_fields)
             if restricted:
                 next = requested.get(f.name, {})
             else:
Index: tests/modeltests/model_inheritance/models.py
===================================================================
--- tests/modeltests/model_inheritance/models.py	(revision 7534)
+++ tests/modeltests/model_inheritance/models.py	(working copy)
@@ -79,6 +79,13 @@
     def __unicode__(self):
         return u"%s the italian restaurant" % self.name
 
+class Pizza(models.Model):
+    restaurant = models.ForeignKey(ItalianRestaurant)
+    name = models.CharField(max_length=50)
+    
+    def __unicode__(self):
+        return u"%s at %s" % (self.name, self.restaurant)
+
 class Supplier(Place):
     customers = models.ManyToManyField(Restaurant, related_name='provider')
 
@@ -263,6 +270,15 @@
 <Chef: Albert the chef>
 >>> len(db.connection.queries)
 3
+>>> restaurant = ItalianRestaurant.objects.all()[0]
+>>> pizza1 = Pizza.objects.create(name='Margherita', restaurant=restaurant)
+>>> pizza2 = Pizza.objects.create(name='Capricciosa', restaurant=restaurant)
+>>> len(Pizza.objects.all().select_related())
+2
+>>> len(Pizza.objects.all().select_related('restaurant'))
+2
+>>> Pizza.objects.all().select_related()[0]
+<Pizza: Capricciosa at True the italian restaurant>
 >>> settings.DEBUG = False
 
 """}
