diff --git a/app/finders/packages/tags_finder.rb b/app/finders/packages/tags_finder.rb
index 020b3d8072a1dc73898420b0a674ca3ba80ee4f7..dd104ea6f9133ddd08bdb6d36c3a7f59e2763cd4 100644
--- a/app/finders/packages/tags_finder.rb
+++ b/app/finders/packages/tags_finder.rb
@@ -15,7 +15,7 @@ def execute
                       .with_name(package_name)
     packages = packages.with_package_type(package_type) if package_type.present?
 
-    Packages::Tag.for_packages(packages)
+    Packages::Tag.for_package_ids(packages.select(:id))
   end
 
   private
diff --git a/app/models/packages/package.rb b/app/models/packages/package.rb
index c6e8ff6c3fa186db71c92926396c3a5b4935d0fd..9b137a378deedc0d431b69aeb52529fca1b959d3 100644
--- a/app/models/packages/package.rb
+++ b/app/models/packages/package.rb
@@ -162,7 +162,8 @@ class Packages::Package < ApplicationRecord
   scope :preload_files, -> { preload(:installable_package_files) }
   scope :preload_nuget_files, -> { preload(:installable_nuget_package_files) }
   scope :preload_pipelines, -> { preload(pipelines: :user) }
-  scope :last_of_each_version, -> { where(id: all.select('MAX(id) AS id').group(:version)) }
+  scope :last_of_each_version, -> { where(id: all.last_of_each_version_ids) }
+  scope :last_of_each_version_ids, -> { select('MAX(id) AS id').unscope(where: :id).group(:version) }
   scope :limit_recent, ->(limit) { order_created_desc.limit(limit) }
   scope :select_distinct_name, -> { select(:name).distinct }
 
diff --git a/app/models/packages/tag.rb b/app/models/packages/tag.rb
index 14a1ae98ed4601806dfb9251c52332631c74ad77..9c17a147bf44db9ff80e6391db9e8395b0b6ea5c 100644
--- a/app/models/packages/tag.rb
+++ b/app/models/packages/tag.rb
@@ -10,8 +10,8 @@ class Packages::Tag < ApplicationRecord
   scope :preload_package, -> { preload(:package) }
   scope :with_name, -> (name) { where(name: name) }
 
-  def self.for_packages(packages)
-    where(package_id: packages.select(:id))
+  def self.for_package_ids(package_ids)
+    where(package_id: package_ids)
       .order(updated_at: :desc)
       .limit(FOR_PACKAGES_TAGS_LIMIT)
   end
diff --git a/app/presenters/packages/npm/package_presenter.rb b/app/presenters/packages/npm/package_presenter.rb
index fabb0a3674600a166ca19aa12bafbb643ca62ac8..57bdd373309774f64b25968f8200fdbe80522f5c 100644
--- a/app/presenters/packages/npm/package_presenter.rb
+++ b/app/presenters/packages/npm/package_presenter.rb
@@ -83,7 +83,7 @@ def sorted_versions
       end
 
       def package_tags
-        Packages::Tag.for_packages(packages)
+        Packages::Tag.for_package_ids(packages.last_of_each_version_ids)
                      .preload_package
       end
 
diff --git a/spec/models/packages/tag_spec.rb b/spec/models/packages/tag_spec.rb
index 842ba7ad51855f1566d6916e7e4083421de77a3d..bc03c34f56b2604dca4d8e4355f01455179ba68a 100644
--- a/spec/models/packages/tag_spec.rb
+++ b/spec/models/packages/tag_spec.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 require 'spec_helper'
 
-RSpec.describe Packages::Tag, type: :model do
+RSpec.describe Packages::Tag, type: :model, feature_category: :package_registry do
   let!(:project) { create(:project) }
   let!(:package) { create(:npm_package, version: '1.0.2', project: project, updated_at: 3.days.ago) }
 
@@ -16,14 +16,14 @@
     it { is_expected.to validate_presence_of(:name) }
   end
 
-  describe '.for_packages' do
+  describe '.for_package_ids' do
     let(:package2) { create(:package, project: project, updated_at: 2.days.ago) }
     let(:package3) { create(:package, project: project, updated_at: 1.day.ago) }
     let!(:tag1) { create(:packages_tag, package: package) }
     let!(:tag2) { create(:packages_tag, package: package2) }
     let!(:tag3) { create(:packages_tag, package: package3) }
 
-    subject { described_class.for_packages(project.packages) }
+    subject { described_class.for_package_ids(project.packages) }
 
     it { is_expected.to match_array([tag1, tag2, tag3]) }
 
@@ -34,6 +34,12 @@
 
       it { is_expected.to match_array([tag2, tag3]) }
     end
+
+    context 'with package ids' do
+      subject { described_class.for_package_ids(project.packages.select(:id)) }
+
+      it { is_expected.to match_array([tag1, tag2, tag3]) }
+    end
   end
 
   describe '.with_name' do