diff --git a/app/models/topic_tracking_state.rb b/app/models/topic_tracking_state.rb
index 9a5fb66a3b5..aa65917c6ea 100644
--- a/app/models/topic_tracking_state.rb
+++ b/app/models/topic_tracking_state.rb
@@ -306,7 +306,7 @@ class TopicTrackingState
           #{tags_filter}
           topics.deleted_at IS NULL AND
           #{category_filter}
-          (category_users.id IS NULL OR
+          (category_users.notification_level IS NULL OR
           last_read_post_number IS NOT NULL OR
           category_users.notification_level <> #{CategoryUser.notification_levels[:muted]})
 SQL
diff --git a/spec/models/topic_tracking_state_spec.rb b/spec/models/topic_tracking_state_spec.rb
index 5f67317ff10..1691547ff46 100644
--- a/spec/models/topic_tracking_state_spec.rb
+++ b/spec/models/topic_tracking_state_spec.rb
@@ -353,6 +353,19 @@ describe TopicTrackingState do
     expect(report.length).to eq(1)
   end
 
+  it "correctly handles category_users with null notification level" do
+    user = Fabricate(:user)
+    post
+
+    report = TopicTrackingState.report(user)
+    expect(report.length).to eq(1)
+
+    CategoryUser.create!(user_id: user.id, category_id: post.topic.category_id)
+
+    report = TopicTrackingState.report(user)
+    expect(report.length).to eq(1)
+  end
+
   context 'muted tags' do
     it "remove_muted_tags_from_latest is set to always" do
       SiteSetting.remove_muted_tags_from_latest = 'always'