diff --git a/django/db/models/query.py b/django/db/models/query.py
index 4d0d295..df9018b 100644
--- a/django/db/models/query.py
+++ b/django/db/models/query.py
@@ -715,14 +715,10 @@ class QOperator(object):
     def get_sql(self, opts):
         joins, where, params = SortedDict(), [], []
         for val in self.args:
-            try:
-                joins2, where2, params2 = val.get_sql(opts)
-                joins.update(joins2)
-                where.extend(where2)
-                params.extend(params2)
-            except EmptyResultSet:
-                if not isinstance(self, QOr):
-                    raise EmptyResultSet
+            joins2, where2, params2 = val.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
@@ -743,6 +739,23 @@ class QAnd(QOperator):
 
 class QOr(QOperator):
     "Encapsulates a combined query that uses 'OR'."
+    def get_sql(self, opts):
+        joins, where, params = SortedDict(), [], []
+        failed = 0
+        for val in self.args:
+            try:
+                joins2, where2, params2 = val.get_sql(opts)
+                joins.update(joins2)
+                where.extend(where2)
+                params.extend(params2)
+            except EmptyResultSet:
+                failed += 1
+        if failed == len( self.args ):
+            raise EmptyResultSet
+
+        if where:
+            return joins, ['(%s)' % self.operator.join(where)], params
+        return joins, [], params
     operator = ' OR '
     def __and__(self, other):
         return QAnd(self, other)
diff --git a/tests/modeltests/or_lookups/models.py b/tests/modeltests/or_lookups/models.py
index ee2cfd2..a529b0f 100644
--- a/tests/modeltests/or_lookups/models.py
+++ b/tests/modeltests/or_lookups/models.py
@@ -116,4 +116,10 @@ __test__ = {'API_TESTS':"""
 [<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=[])) 
+[]
+>>> Article.objects.filter(Q(id__in=[]) | Q(id=1) |Q(id__in=[])) 
+[<Article: Hello>]
 """}
