Existem certos problemas quando se trata de transações e diferentes níveis de isolamento impedem mais ou menos deles. Descrevi isso na minha resposta aqui .
Um problema como a leitura fantasma por exemplo, pode afetar o resultado de um select como você está fazendo, sim. Mas o resultado de SQL_CALC_FOUND_ROWS é armazenado assim que a consulta termina e é perdido assim que você executa outra consulta na mesma sessão. Essa é a parte importante. SQL_CALC_FOUND_ROWS está ligado à sessão . Não há como o resultado de outra consulta em outra sessão ser armazenado em sua sessão atual. O uso de SQL_CALC_FOUND_ROWS não está sujeito a condições de corrida. O resultado da consulta SELECT, sim, mas não o resultado de FOUND_ROWS(). Não confunda isso.