diff --git a/includes/handlers.inc b/includes/handlers.inc
index 9b6464f..29beeaf 100644
--- a/includes/handlers.inc
+++ b/includes/handlers.inc
@@ -1389,22 +1389,31 @@ class views_join {
             $join_table = $info['table'] . '.';
           }
 
-          $placeholder = ':views_join_condition_' . $select_query->nextPlaceholder();
-
           if (is_array($info['value'])) {
+            // With an array of values, we need multiple placeholders and the
+            // 'IN' operator is implicit.
+            foreach ($info['value'] as $value) {
+              $placeholder = ':views_join_condition_' . $select_query->nextPlaceholder();
+              $arguments[$placeholder] = $value;
+            }
+
             $operator = !empty($info['operator']) ? $info['operator'] : 'IN';
             // Transform from IN() notation to = notation if just one value.
             if (count($info['value']) == 1) {
               $info['value'] = array_shift($info['value']);
               $operator = $operator == 'NOT IN' ? '!=' : '=';
             }
+
+            $placeholders = '( ' . implode(', ', array_keys($arguments)) . ' )';
           }
           else {
+            // With a single value, the '=' operator is implicit.
             $operator = !empty($info['operator']) ? $info['operator'] : '=';
+            $placeholders = ':views_join_condition_' . $select_query->nextPlaceholder();
+            $arguments[$placeholders] = $info['value'];
           }
 
-          $extras[] = "$join_table$info[field] $operator $placeholder";
-          $arguments[$placeholder] = $info['value'];
+          $extras[] = "$join_table$info[field] $operator $placeholders";
         }
 
         if ($extras) {
