diff --git a/app/services/boards/issues/move_service.rb b/app/services/boards/issues/move_service.rb
index d6eb4adc5ddba0f4a5a23e09240469822ed5c6a5..84dc3f70e7661021c1fc94e4e61482748cf9aa54 100644
--- a/app/services/boards/issues/move_service.rb
+++ b/app/services/boards/issues/move_service.rb
@@ -11,7 +11,8 @@ module Boards
       private
 
       def valid_move?
-        moving_from_list.present? && moving_to_list.present?
+        moving_from_list.present? && moving_to_list.present? &&
+          moving_from_list != moving_to_list
       end
 
       def moving_from_list
diff --git a/spec/services/boards/issues/move_service_spec.rb b/spec/services/boards/issues/move_service_spec.rb
index 65f2247918fc9ad40a9077ba6df354ddf091b7c4..0122159cab8066218a47a52673679a7401ee52bc 100644
--- a/spec/services/boards/issues/move_service_spec.rb
+++ b/spec/services/boards/issues/move_service_spec.rb
@@ -121,5 +121,20 @@ describe Boards::Issues::MoveService, services: true do
         expect(issue).to be_reopened
       end
     end
+
+    context 'when moving to same list' do
+      let(:issue)  { create(:labeled_issue, project: project, labels: [bug, development]) }
+      let(:params) { { from_list_id: list1.id, to_list_id: list1.id } }
+
+      it 'returns false' do
+        expect(described_class.new(project, user, params).execute(issue)).to eq false
+      end
+
+      it 'keeps issues labels' do
+        described_class.new(project, user, params).execute(issue)
+
+        expect(issue.reload.labels).to contain_exactly(bug, development)
+      end
+    end
   end
 end