diff --git a/django/db/models/query.py b/django/db/models/query.py
index e16fca1..2cef5e5 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -1259,7 +1259,8 @@ def get_cached_row(klass, row, index_start, using, max_depth=0, cur_depth=0,
                 if obj is not None:
                     # If the field is unique, populate the
                     # reverse descriptor cache
-                    setattr(obj, f.related.get_cache_name(), rel_obj)
+                    if rel_obj is not None:
+                        setattr(obj, f.related.get_cache_name(), rel_obj)
                 if rel_obj is not None:
                     # If the related object exists, populate
                     # the descriptor cache.
diff --git a/tests/regressiontests/select_related_onetoone/models.py b/tests/regressiontests/select_related_onetoone/models.py
index 3d6da9b..1be9eb8 100644
--- a/tests/regressiontests/select_related_onetoone/models.py
+++ b/tests/regressiontests/select_related_onetoone/models.py
@@ -52,3 +52,7 @@ class Image(models.Model):
 class Product(models.Model):
     name = models.CharField(max_length=100)
     image = models.OneToOneField(Image, null=True)
+
+
+class UserChild(User):
+    pass
diff --git a/tests/regressiontests/select_related_onetoone/tests.py b/tests/regressiontests/select_related_onetoone/tests.py
index 4ccb584..e8c1541 100644
--- a/tests/regressiontests/select_related_onetoone/tests.py
+++ b/tests/regressiontests/select_related_onetoone/tests.py
@@ -3,7 +3,7 @@ from django.conf import settings
 from django.test import TestCase
 
 from models import (User, UserProfile, UserStat, UserStatResult, StatDetails,
-    AdvancedUserStat, Image, Product)
+    AdvancedUserStat, Image, Product, UserChild)
 
 class ReverseSelectRelatedTestCase(TestCase):
     def setUp(self):
@@ -92,3 +92,21 @@ class ReverseSelectRelatedTestCase(TestCase):
         p2 = Product.objects.create(name="Talking Django Plushie")
 
         self.assertEqual(len(Product.objects.select_related("image")), 2)
+
+    def test_select_related_with_inheritance(self):
+        """
+        select_related should not pre-fill the SingleRelatedObjectDescriptor
+        cache with None when the related object does not exist.
+
+        This tests both the inheritance and the standard OneToOneField usage
+        case.
+        """
+        User.objects.create(username='test13839')
+        user = User.objects.filter(username='test13839')[0]
+
+        self.assertRaises(UserChild.DoesNotExist, lambda: user.userchild)
+        self.assertRaises(UserProfile.DoesNotExist, lambda: user.userprofile)
+
+        user = User.objects.filter(username='test13839').select_related('userchild', 'userprofile')[0]
+        self.assertRaises(UserChild.DoesNotExist, lambda: user.userchild)
+        self.assertRaises(UserProfile.DoesNotExist, lambda: user.userprofile)
