diff --git wp-includes/query.php wp-includes/query.php
index bc6edea..cefe9ca 100644
--- wp-includes/query.php
+++ wp-includes/query.php
@@ -1951,6 +1951,7 @@ class WP_Query {
 		$fields = '';
 		$post_status_join = false;
 		$page = 1;
+		$expand_ids = false;
 
 		if ( isset( $q['caller_get_posts'] ) ) {
 			_deprecated_argument( 'WP_Query', '3.1', __( '"caller_get_posts" is deprecated. Use "ignore_sticky_posts" instead.' ) );
@@ -2597,6 +2598,11 @@ class WP_Query {
 				$$piece = isset( $clauses[ $piece ] ) ? $clauses[ $piece ] : '';
 		}
 
+		if ( "$wpdb->posts.*" == $fields ) {
+			$fields = "$wpdb->posts.ID";
+			$expand_ids = true;
+		}
+
 		if ( ! empty($groupby) )
 			$groupby = 'GROUP BY ' . $groupby;
 		if ( !empty( $orderby ) )
@@ -2626,7 +2632,26 @@ class WP_Query {
 			return $r;
 		}
 
-		$this->posts = $wpdb->get_results($this->request);
+		if ( $expand_ids ) {
+			$ids = $wpdb->get_col( $this->request );
+
+			if ( $ids ) {
+				if ( !$q['no_found_rows'] && !empty( $limits ) ) {
+					$found_posts_query = apply_filters_ref_array( 'found_posts_query', array( 'SELECT FOUND_ROWS()', &$this ) );
+					$this->found_posts = $wpdb->get_var( $found_posts_query );
+					$this->found_posts = apply_filters_ref_array( 'found_posts', array( $this->found_posts, &$this ) );
+					$this->max_num_pages = ceil($this->found_posts / $q['posts_per_page']);
+				}
+
+				$query = sprintf( "SELECT $wpdb->posts.* FROM $wpdb->posts WHERE ID IN (%s) $orderby", join( ",", $ids ) );
+				$this->posts = $wpdb->get_results($query);
+			} else {
+				$this->found_posts = $this->max_num_pages = 0;
+				$this->posts = array();
+			}
+		} else {
+			$this->posts = $wpdb->get_results($this->request);
+		}
 
 		// Raw results filter. Prior to status checks.
 		if ( !$q['suppress_filters'] )
@@ -2645,7 +2670,7 @@ class WP_Query {
 			$this->comment_count = count($this->comments);
 		}
 
-		if ( !$q['no_found_rows'] && !empty($limits) ) {
+		if ( !$q['no_found_rows'] && !empty($limits) && !$expand_ids ) {
 			$found_posts_query = apply_filters_ref_array( 'found_posts_query', array( 'SELECT FOUND_ROWS()', &$this ) );
 			$this->found_posts = $wpdb->get_var( $found_posts_query );
 			$this->found_posts = apply_filters_ref_array( 'found_posts', array( $this->found_posts, &$this ) );
