=== modified file 'django/db/models/query.py'
--- django/db/models/query.py	2006-12-19 04:35:09 +0000
+++ django/db/models/query.py	2006-12-20 03:23:03 +0000
@@ -641,7 +641,11 @@
     except KeyError:
         pass
     if lookup_type == 'in':
-        return '%s%s IN (%s)' % (table_prefix, field_name, ','.join(['%s' for v in value]))
+        in_string = ','.join(['%s' for id in value])
+        if in_string:
+            return '%s%s IN (%s)' % (table_prefix, field_name, in_string)
+        else:
+            return 'false'
     elif lookup_type == 'range':
         return '%s%s BETWEEN %%s AND %%s' % (table_prefix, field_name)
     elif lookup_type in ('year', 'month', 'day'):

=== modified file 'tests/modeltests/or_lookups/models.py'
--- tests/modeltests/or_lookups/models.py	2006-12-19 04:35:09 +0000
+++ tests/modeltests/or_lookups/models.py	2006-12-19 06:49:47 +0000
@@ -69,6 +69,21 @@
 >>> Article.objects.filter(Q(pk=1) | Q(pk=2) | Q(pk=3))
 [<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>]
 
+# You could also use "in" to accomplish the same as above.
+>>> Article.objects.filter(pk__in=[1,2,3])
+[<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>]
+
+>>> Article.objects.filter(pk__in=[1,2,3,4])
+[<Article: Hello>, <Article: Goodbye>, <Article: Hello and goodbye>]
+
+# Passing "in" an empty list returns no results.
+>>> Article.objects.filter(pk__in=[])
+[]
+
+# But can return results if we OR it with another query.
+>>> Article.objects.filter(Q(pk__in=[]) | Q(headline__icontains='goodbye'))
+[<Article: Goodbye>, <Article: Hello and goodbye>]
+
 # Q arg objects are ANDed
 >>> Article.objects.filter(Q(headline__startswith='Hello'), Q(headline__contains='bye'))
 [<Article: Hello and goodbye>]

