Index: django/db/models/sql/subqueries.py
===================================================================
--- django/db/models/sql/subqueries.py	(revision 12693)
+++ django/db/models/sql/subqueries.py	(working copy)
@@ -174,7 +174,7 @@
         for model, values in self.related_updates.iteritems():
             query = UpdateQuery(model)
             query.values = values
-            if self.related_ids:
+            if self.related_ids is not None:
                 query.add_filter(('pk__in', self.related_ids))
             result.append(query)
         return result
Index: tests/modeltests/update2/__init__.py
===================================================================
Index: tests/modeltests/update2/tests.py
===================================================================
--- tests/modeltests/update2/tests.py	(revision 0)
+++ tests/modeltests/update2/tests.py	(revision 0)
@@ -0,0 +1,59 @@
+
+from django.test import TestCase
+
+from models import A, B, D
+
+class SimpleTest(TestCase):
+    def setUp(self):
+        self.a1=A.objects.create()
+        self.a2=A.objects.create()
+        for x in range(20):
+            B.objects.create(a=self.a1)
+            D.objects.create(a=self.a1)
+
+    def tearDown(self):
+        B.objects.all().delete()
+        A.objects.all().delete()
+
+
+    def test_nonempty_update(self):
+        """
+        Test that update changes that right number of rows for a nonempty queryset
+        """
+        num_updated=self.a1.b_set.update(y=100)
+        self.failUnlessEqual(num_updated, 20)
+        cnt=B.objects.filter(y=100).count()
+        self.failUnlessEqual(cnt, 20)
+
+    def test_empty_update(self):
+        """
+        Test that update changes that right number of rows for an empty queryset
+        """
+
+        num_updated=self.a2.b_set.update(y=100)
+        self.failUnlessEqual(num_updated, 0)
+        cnt=B.objects.filter(y=100).count()
+        self.failUnlessEqual(cnt, 0)
+
+    def test_nonempty_update_with_inheritance(self):
+        """
+        Test that update changes that right number of rows for an empty queryset
+        when the update affects only a base table
+        """
+
+        num_updated=self.a1.d_set.update(y=100)
+        self.failUnlessEqual(num_updated, 20)
+        cnt=D.objects.filter(y=100).count()
+        self.failUnlessEqual(cnt, 20)
+
+
+    def test_empty_update_with_inheritance(self):
+        """
+        Test that update changes that right number of rows for an empty queryset
+        when the update affects only a base table
+        """
+
+        num_updated=self.a2.d_set.update(y=100)
+        self.failUnlessEqual(num_updated, 0)
+        cnt=D.objects.filter(y=100).count()
+        self.failUnlessEqual(cnt, 0)
Index: tests/modeltests/update2/models.py
===================================================================
--- tests/modeltests/update2/models.py	(revision 0)
+++ tests/modeltests/update2/models.py	(revision 0)
@@ -0,0 +1,15 @@
+
+from django.db import models
+
+class A(models.Model):
+    x=models.IntegerField(default=10)
+
+class B(models.Model):
+    a=models.ForeignKey(A)
+    y=models.IntegerField(default=10)
+
+class C(models.Model):
+    y=models.IntegerField(default=10)
+
+class D(C):
+    a=models.ForeignKey(A)
