Index: django/db/models/query.py
===================================================================
--- django/db/models/query.py	(revision 6783)
+++ django/db/models/query.py	(working copy)
@@ -714,15 +714,19 @@
 
     def get_sql(self, opts):
         joins, where, params = SortedDict(), [], []
-        for val in self.args:
+        for val in self.args[:-1]:
             try:
                 joins2, where2, params2 = val.get_sql(opts)
                 joins.update(joins2)
                 where.extend(where2)
                 params.extend(params2)
             except EmptyResultSet:
-                if not isinstance(self, QOr):
+                if not(isinstance(self, QOr)):
                     raise EmptyResultSet
+        joins2, where2, params2 = self.args[-1].get_sql(opts)
+        joins.update(joins2)
+        where.extend(where2)
+        params.extend(params2)
         if where:
             return joins, ['(%s)' % self.operator.join(where)], params
         return joins, [], params
Index: tests/modeltests/or_lookups/models.py
===================================================================
--- tests/modeltests/or_lookups/models.py	(revision 6783)
+++ tests/modeltests/or_lookups/models.py	(working copy)
@@ -116,4 +116,8 @@
 [<Article: Hello>]
 >>> Article.objects.complex_filter(Q(pk=1) | Q(pk=2))
 [<Article: Hello>, <Article: Goodbye>]
+
+# Check that Q(id__in=[]) returns the same results as Q(id__in=[]) | Q(id__in=[]) when used with filter :
+>>> Article.objects.filter(Q(id__in=[]) | Q(id__in=[]))
+[]
 """}
