### Godot version

4.2.dev3.official[013e8e3af]

### System information

Godot v4.2.dev3 - Arch Linux #1 SMP PREEMPT_DYNAMIC Fri, 11 Aug 2023 11:03:36 +0000 - X11 - GLES3 (Compatibility) - NVIDIA GeForce RTX 2060 (nvidia; 535.98) - Intel(R) Core(TM) i7-10875H CPU @ 2.30GHz (16 Threads)

### Issue description

`TileMap.get_used_cells_by_id()` seems not work as expected.
It seems that this method will return the same result as "TileMap.get_used_cells()" since Godot 4.2dev2.
The arguments  (`source_id: int`, `atlas_coords: Vector2i`, `alternative_tile: int`) of `get_used_cells_by_id()` seems not make the filter working as expected.  It would only return the same result as `get_used_cells()`, contains all the tiles on the layer.

### Steps to reproduce

1. create a tilemap scene
2. attach a tileset, that contains  at least 2 tiles , paint some tiles.
3. calls Tilemap.get_used_cells_by_id(layer, source_id, atlas_coords,alternative_tile)
4. run it

### Minimal reproduction project

run tile_map.tscn by Godot4dev3 (or custom build)
[tilemap_debug.zip](https://github.com/godotengine/godot/files/12369631/tilemap_debug.zip)

(source_id != TileSet::INVALID_SOURCE || atlas_coords != TileSetSource::INVALID_ATLAS_COORDS || alternative_tile != TileSetSource::INVALID_TILE_ALTERNATIVE)) {
		source_id = TileSet::INVALID_SOURCE;
		atlas_coords = TileSetSource::INVALID_ATLAS_COORDS;
		alternative_tile = TileSetSource::INVALID_TILE_ALTERNATIVE;
	}
	if (!E && source_id == TileSet::INVALID_SOURCE) {
		return; 
	}
	
	Vector2i qk = _coords_to_quadrant_coords(pk);
	HashMap<Vector2i, TileMapQuadrant>::Iterator Q = quadrant_map.find(qk);
	if (source_id == TileSet::INVALID_SOURCE) {
		
		tile_map.erase(pk);
		
		ERR_FAIL_COND(!Q);
		TileMapQuadrant &q = Q->value;
		
		HashMap<Vector2i, String>::Iterator entry = q.scenes.find(pk);
		if (entry != q.scenes.end()) {
			String scene_name = entry->value;
			Node *scene = tile_map_node->get_node_or_null(scene_name);
			if (scene) {
				scene->queue_free();
				instantiated_scenes.erase(Vector2i(pk.x, pk.y));
			}
		}
		q.cells.erase(pk);
		
		if (q.cells.size() == 0) {