请问having后条件的执行情况

这两段代码里最后的筛选条件having后面不一样,但是第一个选出的答案只有一个,第二个就有两个,他们的最高成绩是一样的都是90

按理说应该一样啊,为什么第一段代码输出的为一行呢


/*32.成绩有重复的情况下,查询选修张衡老师所授课程的学生中,
成绩最高的学生信息及其成绩:
*/
SELECT s.*,g.cid,g.score
FROM student s LEFT JOIN grade g USING(sid)
WHERE g.cid IN(
SELECT cid FROM course WHERE tid IN
(SELECT tid FROM teacher WHERE tname='张衡'))
HAVING g.score=MAX(score);

#答案
SELECT s.*,g.cid,g.score
FROM student s LEFT JOIN grade g USING(sid)
WHERE g.cid IN(
SELECT cid FROM course WHERE tid IN
(SELECT tid FROM teacher WHERE tname='张衡'))
HAVING g.score=(SELECT MAX(score) FROM grade WHERE cid = (SELECT cid FROM course WHERE tid = 
(SELECT tid FROM teacher WHERE tname = '张衡')));

问题相关代码,请勿粘贴截图

第一段代码运行结果
sid sname sbirth sgender cid score
01 赵雷 1990-01-01 00:00:00 男 02 90.0
第二段运行结果
sid sname sbirth sgender cid score
01 赵雷 1990-01-01 00:00:00 男 02 90.0
10 李四 2017-12-16 00:00:00 女 02 90.0

我的解答思路和尝试过的方法
我想要达到的结果

sid cid score
01 01 80.0
01 02 90.0
10 01 88.0
10 02 90.0
这是得分表数据,他们不管是所有成绩,还是02成绩都是90