diff --git a/changelogs/unreleased/33032-invalid-you-directly-addressed-yourself-todo-when-using-unsubscribe.yml b/changelogs/unreleased/33032-invalid-you-directly-addressed-yourself-todo-when-using-unsubscribe.yml
new file mode 100644
index 0000000000000000000000000000000000000000..1eaa0d0124e828fa07b059decdd8985af3241c7a
--- /dev/null
+++ b/changelogs/unreleased/33032-invalid-you-directly-addressed-yourself-todo-when-using-unsubscribe.yml
@@ -0,0 +1,5 @@
+---
+title: Fix /unsubscribe slash command creating extra todos when you were already mentioned
+  in an issue
+merge_request:
+author:
diff --git a/lib/banzai/reference_parser/base_parser.rb b/lib/banzai/reference_parser/base_parser.rb
index c2503fa2adc231bfa895535427decf4c6a0c5fac..d99a3bfa62533a6c422c306208ef68ca8632c26a 100644
--- a/lib/banzai/reference_parser/base_parser.rb
+++ b/lib/banzai/reference_parser/base_parser.rb
@@ -163,14 +163,15 @@ module Banzai
       # been queried the object is returned from the cache.
       def collection_objects_for_ids(collection, ids)
         if RequestStore.active?
+          ids = ids.map(&:to_i)
           cache = collection_cache[collection_cache_key(collection)]
-          to_query = ids.map(&:to_i) - cache.keys
+          to_query = ids - cache.keys
 
           unless to_query.empty?
             collection.where(id: to_query).each { |row| cache[row.id] = row }
           end
 
-          cache.values
+          cache.values_at(*ids)
         else
           collection.where(id: ids)
         end
diff --git a/spec/lib/banzai/reference_parser/user_parser_spec.rb b/spec/lib/banzai/reference_parser/user_parser_spec.rb
index 4ec998efe53804dc9ccfdf7c9fc25edef23b3f2b..592ed0d2b982820f6a4b2099a33f5d2942c8c25a 100644
--- a/spec/lib/banzai/reference_parser/user_parser_spec.rb
+++ b/spec/lib/banzai/reference_parser/user_parser_spec.rb
@@ -42,6 +42,29 @@ describe Banzai::ReferenceParser::UserParser, lib: true do
 
         expect(subject.referenced_by([link])).to eq([user])
       end
+
+      context 'when RequestStore is active' do
+        let(:other_user) { create(:user) }
+
+        before do
+          RequestStore.begin!
+        end
+
+        after do
+          RequestStore.end!
+          RequestStore.clear!
+        end
+
+        it 'does not return users from the first call in the second' do
+          link['data-user'] = user.id.to_s
+
+          expect(subject.referenced_by([link])).to eq([user])
+
+          link['data-user'] = other_user.id.to_s
+
+          expect(subject.referenced_by([link])).to eq([other_user])
+        end
+      end
     end
 
     context 'when the link has a data-project attribute' do
@@ -74,7 +97,7 @@ describe Banzai::ReferenceParser::UserParser, lib: true do
     end
   end
 
-  describe '#nodes_visible_to_use?' do
+  describe '#nodes_visible_to_user' do
     context 'when the link has a data-group attribute' do
       context 'using an existing group ID' do
         before do