Why does have_comments return false but get_comments return array of commemts?

get_comments() doesn’t get comments for the current post. So you’re getting all comments regardless of post.

The comment list can be for the blog as a whole or for an individual
post.

https://developer.wordpress.org/reference/functions/get_comments/