diff --git a/app/models/ci/pipeline.rb b/app/models/ci/pipeline.rb
index 6894a5763ff6ae66d2eb8792b54e5f3f32908267..f2f6453b3b90b865246ecbc9872e9bc0a20ef64f 100644
--- a/app/models/ci/pipeline.rb
+++ b/app/models/ci/pipeline.rb
@@ -93,8 +93,11 @@ module Ci
         .select("max(#{quoted_table_name}.id)")
         .group(:ref, :sha)
 
-      relation = ref ? where(ref: ref) : self
-      relation.where(id: max_id).order(id: :desc)
+      if ref
+        where(id: max_id, ref: ref)
+      else
+        where(id: max_id)
+      end
     end
 
     def self.latest_status(ref = nil)
diff --git a/app/models/project.rb b/app/models/project.rb
index 72fdd4514c4bda5757611222fc62941b62ebca8e..26fa20f856de195c6641f4e86eadb72eb80731cd 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -418,7 +418,7 @@ class Project < ActiveRecord::Base
     repository.commit(ref)
   end
 
-  # ref can't be HEAD or SHA, can only be branch/tag name
+  # ref can't be HEAD, can only be branch/tag name or SHA
   def latest_successful_builds_for(ref = default_branch)
     latest_pipeline = pipelines.latest_successful_for(ref)
 
diff --git a/spec/models/ci/pipeline_spec.rb b/spec/models/ci/pipeline_spec.rb
index b28da6daabf929bfb243665c4b5c329095e95068..dc377d15f1593d791246f986ade2c49c45d460d2 100644
--- a/spec/models/ci/pipeline_spec.rb
+++ b/spec/models/ci/pipeline_spec.rb
@@ -424,18 +424,20 @@ describe Ci::Pipeline, models: true do
     context 'when no ref is specified' do
       let(:pipelines) { described_class.latest.all }
 
-      it 'gives the latest pipelines for the same ref and different sha in reverse chronological order' do
-        expect(pipelines.map(&:sha)).to eq(%w[C B A])
-        expect(pipelines.map(&:status)).to eq(%w[skipped failed success])
+      it 'returns the latest pipeline for the same ref and different sha' do
+        expect(pipelines.map(&:sha)).to contain_exactly('A', 'B', 'C')
+        expect(pipelines.map(&:status)).
+          to contain_exactly('success', 'failed', 'skipped')
       end
     end
 
     context 'when ref is specified' do
       let(:pipelines) { described_class.latest('ref').all }
 
-      it 'gives the latest pipelines for ref and different sha in reverse chronological order' do
-        expect(pipelines.map(&:sha)).to eq(%w[B A])
-        expect(pipelines.map(&:status)).to eq(%w[failed success])
+      it 'returns the latest pipeline for ref and different sha' do
+        expect(pipelines.map(&:sha)).to contain_exactly('A', 'B')
+        expect(pipelines.map(&:status)).
+          to contain_exactly('success', 'failed')
       end
     end
   end