Why isn't the rows of an EXPLAIN accurate?
You may find this surprising but that's the behavior of InnoDB.

The InnoDB storage engine does cardinality approximation by walking a few levels down the nonleaf BTREE nodes and takes an educated guess.

I wrote about this a long time ago based on mysqlperformanceblog.com


Jun 21, 2011 : From where does the MySQL Query Optimizer read index statistics?
Aug 03, 2011 : When should I rebuild indexes?
Feb 23, 2013 : How does mysql deal with queries that touches myisam and innodb tables?


Perhaps you could try disabling that behavior by running this:

SET GLOBAL innodb_stats_on_metadata = 0;


Setting innodb_stats_on_metadata  should stabilize the approximate cardinality and you should get the same cardinality over and over again.