The first thing I would do is make note of the post and comments, then I would deactivate all plugins and see what happens. If the problem still exists, I would switch to the default theme and see wat happens. If
1) you have no fancy comment plugins and/or
2) you haven't messed with the wordpress code and/or
3) you haven't coded and of your own queries
my first guess is that you have corruption in the database. You should do a database back up immediately (download and install the wp-dbmanager plugin and set it up - or get into phpMyAdmin and backup the DB) and you should repair and optimize it AFTER YOU DO A BACKUP.
HOWEVER, this may not help. The database is a series of tables and some rows of a table may have a key to a row in another table. So you may have a post with an ID of 34,
HTML Code:
POSTID=35, POST TEST="This is the first post', etc
when a comment is added to the comment table, it gets a comment ID of say 543, but since it is with this post, it should also get a post ID of 34.
HTML Code:
COMMENTID=543, COMMENT TEXT='what a wonderful post you have made', POSTID=34, etc
COMMENTID=544, COMMENT TEXT='I just love your new site', POSTID=34, etc
So to find the comments for a post, the code just says, 'show me all comments with the comment-post-id equal to my post-id'
HTML Code:
This is the first post
what a wonderful post you have made
I just love your new site
Somehow this is being messed up so that instead of having POSTID=34 assigned to the comments, another ID is being placed there.
Unless it is something simple, like a plugin conflict, finding an error like this is going to be difficult and time consuming and you are probably going to need to hire someone to help you out. You should evaluate how much you have in the database - ie if you have 20 osts and 30 comments, it might be easier and less expensive to manually re-enter them.
You may also want to refresh the wordpress/plugins and theme code (ie replace all the code with a fresh copy of the same version) in case it is a corruption in the code