diff --git a/core/modules/views/src/Plugin/views/join/JoinPluginBase.php b/core/modules/views/src/Plugin/views/join/JoinPluginBase.php
index 45418c9..98f762f 100644
--- a/core/modules/views/src/Plugin/views/join/JoinPluginBase.php
+++ b/core/modules/views/src/Plugin/views/join/JoinPluginBase.php
@@ -296,19 +296,17 @@ public function buildJoin($select_query, $table, $view_query) {
           if (is_array($info['value']) && count($info['value']) == 1) {
             $info['value'] = array_shift($info['value']);
           }
-
+          $use_parenthesis = FALSE;
           if (is_array($info['value'])) {
-            // With an array of values, we need multiple placeholders and the
-            // 'IN' operator is implicit.
+            // We use an SA-CORE-2014-005 conformant placeholder for our array
+            // of values. Also, note that the 'IN' operator is implicit.
+            // @see https://www.drupal.org/node/2401615.
             $local_arguments = array();
-            foreach ($info['value'] as $value) {
-              $placeholder_i = ':views_join_condition_' . $select_query->nextPlaceholder();
-              $local_arguments[$placeholder_i] = $value;
-            }
-
+            $placeholder = ':views_join_condition_' . $select_query->nextPlaceholder() . '[]';
+            $local_arguments[$placeholder] = $info['value'];
             $operator = !empty($info['operator']) ? $info['operator'] : 'IN';
-            $placeholder = '( ' . implode(', ', array_keys($local_arguments)) . ' )';
             $arguments += $local_arguments;
+            $use_parenthesis = TRUE;
           }
           else {
             // With a single value, the '=' operator is implicit.
@@ -333,7 +331,13 @@ public function buildJoin($select_query, $table, $view_query) {
             $join_table_field = "$left[alias].$info[left_field]";
             $arguments[$placeholder] = $info['value'];
           }
-          $extras[] = "$join_table_field $operator $placeholder";
+          // Render out the SQL fragment with parameters.
+          if ($use_parenthesis) {
+            $extras[] = "$join_table_field $operator ( $placeholder )";
+          }
+          else {
+            $extras[] = "$join_table_field $operator $placeholder";
+          }
         }
 
         if ($extras) {
diff --git a/core/modules/views/src/Tests/Plugin/JoinTest.php b/core/modules/views/src/Tests/Plugin/JoinTest.php
index fa1460c..e673815 100644
--- a/core/modules/views/src/Tests/Plugin/JoinTest.php
+++ b/core/modules/views/src/Tests/Plugin/JoinTest.php
@@ -177,7 +177,7 @@ public function testBasePlugin() {
     $join_info = $tables['users4'];
     $this->assertTrue(strpos($join_info['condition'], "views_test_data.uid = users4.uid") !== FALSE, 'Make sure the join condition appears in the query.');
     $this->assertTrue(strpos($join_info['condition'], "users4.name = :views_join_condition_2") !== FALSE, 'Make sure the first extra join condition appears in the query.');
-    $this->assertTrue(strpos($join_info['condition'], "users4.name IN ( :views_join_condition_3, :views_join_condition_4, :views_join_condition_5 )") !== FALSE, 'The IN condition for the join is properly formed.');
+    $this->assertTrue(strpos($join_info['condition'], "users4.name IN ( :views_join_condition_3[] )") !== FALSE, 'The IN condition for the join is properly formed.');
 
     // Test that all the conditions are properly built.
     $configuration['extra'] = array(
@@ -202,8 +202,8 @@ public function testBasePlugin() {
     $tables = $query->getTables();
     $join_info = $tables['users5'];
     $this->assertTrue(strpos($join_info['condition'], "views_test_data.uid = users5.uid") !== FALSE, 'Make sure the join condition appears in the query.');
-    $this->assertTrue(strpos($join_info['condition'], "users5.langcode = :views_join_condition_6") !== FALSE, 'Make sure the first extra join condition appears in the query.');
-    $this->assertTrue(strpos($join_info['condition'], "views_test_data.status = :views_join_condition_7") !== FALSE, 'Make sure the second extra join condition appears in the query.');
+    $this->assertTrue(strpos($join_info['condition'], "users5.langcode = :views_join_condition_4") !== FALSE, 'Make sure the first extra join condition appears in the query.');
+    $this->assertTrue(strpos($join_info['condition'], "views_test_data.status = :views_join_condition_5") !== FALSE, 'Make sure the second extra join condition appears in the query.');
     $this->assertTrue(strpos($join_info['condition'], "users5.name = views_test_data.name") !== FALSE, 'Make sure the third extra join condition appears in the query.');
     $this->assertEqual(array_values($join_info['arguments']), array('en', 0), 'Make sure the arguments are in the right order');
   }
