### Godot version

v4.0.beta.custom_build [0a9e6e478]

### System information

Ubuntu, Nvidia, Vulkan

### Issue description

When a Camera2D is freed - either explicitly or by being a child of a scene that is being switched away from via a method like `get_tree().change_scene_to_file()` - then this camera somehow stays active instead of Godot properly switching to no-camera-mode.

`get_viewport().get_camera_2d()` then returns all sorts of funny things from `<Freed Object>`  (it's supposed to return `null`) to arbitrary nodes of the current scene (not cameras).

This can lead to crashes.

### Steps to reproduce

checkout the MRP.

note that the "Go to scene 2" button switches places after pressing it.
that is because a camera is still active that does not exist in the current tree.

restart it a couple of times and spam the "Go to scene 2" button.
notice the garbage output.

### Minimal reproduction project

[godot_4_camera_bug.zip](https://github.com/godotengine/godot/files/10560455/godot_4_camera_bug.zip)
if (new_rect.position.x + new_rect.size.x > limit.x) {
						new_rect.position.x = limit.x - new_rect.size.x;
					}
					if (new_rect.position.y + new_rect.size.y > limit.y) {
						new_rect.position.y = limit.y - new_rect.size.y;
					}
					if (new_rect.position.x < 0) {
						new_rect.position.x = 0;
					}
					int title_height = gui.subwindow_focused->get_flag(Window::FLAG_BORDERLESS) ? 0 : gui.subwindow_focused->get_theme_constant(SNAME("title_height"));
					if (new_rect.position.y < title_height) {
						new_rect.position.y = title_height;
					}
				}
				gui.subwindow_focused->_rect_changed_callback(new_rect);
			}
			if (gui.subwindow_drag == SUB_WINDOW_DRAG_CLOSE) {
				gui.subwindow_drag_close_inside = gui.subwindow_drag_close_rect.has_point(mm->get_position());
			}
			if (gui.subwindow_drag == SUB_WINDOW_DRAG_RESIZE) {
				Vector2i diff = mm->get_position() - gui.subwindow_drag_from;
				Size2i min_size = gui.subwindow_focused->get_min_size();
				Size2i min_size_adjusted = min_size;
				if (gui.subwindow_focused->is_wrapping_controls()) {
					Size2i cms = gui.subwindow_focused->get_contents_minimum_size();
					min_size_adjusted.x = MAX(cms.x, min_size.x);
					min_size_adjusted.y = MAX(cms.y, min_size.y);
				}
				min_size_adjusted.x = MAX(min_size_adjusted.x, 1);
				min_size_adjusted.y = MAX(min_size_adjusted.y, 1);