# Diagnosis
## Symptom
`query(id=...)` returns unexpected matches, or fails where `fetch` on the same id works.
## Likely cause
Query-by-id runs a similarity search using the stored vector as the query; it is subject to the same top_k, filter, and namespace rules as a vector query. It is not a point lookup. The docs also note limitations on querying by id versus fetching.
## Confirm it
1. Run `fetch` on the id: if fetch works, the record exists and the issue is query semantics.
2. Check the namespace on the query call; query-by-id still scopes to a namespace.
3. Check whether a filter is excluding the expected neighbors.
## Fix
1. For point lookups use `fetch`, not `query(id=...)`.
2. For find-similar-to-this-record, keep `query(id=...)` but set namespace, top_k, and filter deliberately.
3. If you need the vector values back too, pass `include_values=True`; matches do not include values by default.
## Verify the fix
Fetch the id, then query by the fetched values directly and compare the match lists; they should agree.