diff --git modules/node/node.module modules/node/node.module
index 5e875f2..abbbe34 100644
--- modules/node/node.module
+++ modules/node/node.module
@@ -3017,8 +3017,6 @@ function node_query_node_access_alter(QueryAlterableInterface $query) {
     return;
   }
 
-  // Prevent duplicate records.
-  $query->distinct();
 
   // Find all instances of the {node} table being joined -- could appear
   // more than once in the query, and could be aliased. Join each one to
@@ -3026,28 +3024,35 @@ function node_query_node_access_alter(QueryAlterableInterface $query) {
 
   $tables = $query->getTables();
   $grants = node_access_grants($op, $account);
+
+  // Prevent duplicate records. By adding a distinct set of records from
+  // node_access to the query, we will prevent duplicate records. This will
+  // also reduce the returned dataset and improve performance on any sorts.
+  $node_access = db_select('node_access', 'na')
+                  ->fields('na', array('nid', 'grant_' . $op))
+                  ->distinct();
   foreach ($tables as $nalias => $tableinfo) {
     $table = $tableinfo['table'];
     if (!($table instanceof SelectQueryInterface) && $table == 'node') {
+      $subquery = clone $node_access;
 
       // The node_access table has the access grants for any given node.
-      $access_alias = $query->join('node_access', 'na', '%alias.nid = ' . $nalias . '.nid');
-      $or = db_or();
+      // $access_alias = $query->join('node_access', 'na', '%alias.nid = ' . $nalias . '.nid');
       // If any grant exists for the specified user, then user has access
       // to the node for the specified operation.
       foreach ($grants as $realm => $gids) {
         foreach ($gids as $gid) {
           $or->condition(db_and()
-            ->condition($access_alias . '.gid', $gid)
-            ->condition($access_alias . '.realm', $realm)
+            ->condition('na.gid', $gid)
+            ->condition('na.realm', $realm)
           );
         }
       }
 
       if (count($or->conditions())) {
-        $query->condition($or);
+        $subquery->condition($or);
       }
-
+      $access_alias = $query->join($subquery, 'na', '%alias.nid = ' . $nalias . '.nid');
       $query->condition($access_alias . '.grant_' . $op, 1, '>=');
     }
   }
