diff --git a/src/api/client_server/membership.rs b/src/api/client_server/membership.rs
index b69a6d1f..ca339938 100644
--- a/src/api/client_server/membership.rs
+++ b/src/api/client_server/membership.rs
@@ -474,8 +474,12 @@ async fn join_room_by_id_helper(
     );
     let state_lock = mutex_state.lock().await;
 
-    // Ask a remote server if we don't have this room
-    if !services().rooms.metadata.exists(room_id)? {
+    // Ask a remote server if we are not participating in this room
+    if !services()
+        .rooms
+        .state_cache
+        .server_in_room(services().globals.server_name(), room_id)?
+    {
         let mut make_join_response_and_server = Err(Error::BadServerResponse(
             "No server available to assist in joining.",
         ));
diff --git a/src/database/key_value/rooms/state_cache.rs b/src/database/key_value/rooms/state_cache.rs
index ff4594f0..d0ea0c2c 100644
--- a/src/database/key_value/rooms/state_cache.rs
+++ b/src/database/key_value/rooms/state_cache.rs
@@ -108,8 +108,7 @@ impl service::rooms::state_cache::Data for KeyValueDatabase {
             joinedcount += 1;
         }
 
-        for invited in self.room_members_invited(room_id).filter_map(|r| r.ok()) {
-            joined_servers.insert(invited.server_name().to_owned());
+        for _invited in self.room_members_invited(room_id).filter_map(|r| r.ok()) {
             invitedcount += 1;
         }