关于sql server中intersect、嵌套、连接查询方法的转换问题

建立两个表 分别是STUDENT表(学生表)、CHOOSE表(选课表)
建表语言如下

--创建表STUDENT
create table STUDENT(
    ID varchar(20),
    Name varchar(10),
    Age int,
    Department varchar(30)
);
--创建表CHOOSE
create table CHOOSE(
    ID varchar(20),
    CourseID varchar(30),
    Score dec(5,2)
);

插入数据

insert STUDENT values('00001','张三',20,'计算机系');
insert STUDENT values('00002','李四',19,'计算机系');
insert STUDENT values('00003','王五',21,'计算机系');
insert CHOOSE values('00001','C1',95);
insert CHOOSE values('00001','C2',80);
insert CHOOSE values('00001','C3',84);
insert CHOOSE values('00002','C1',80);
insert CHOOSE values('00002','C2',85);
insert CHOOSE values('00003','C1',78);
insert CHOOSE values('00003','C3',70);

要查询选择了C2课程并且也选了C3课程的学生姓名
①第一种想到的是使用intersect

select name from STUDENT where ID in (
select ID from CHOOSE where CourseID = 'C2' 
intersect 
select ID from CHOOSE where CourseID = 'C3');
--输出结果为张三

②第二种是全部使用嵌套

select name from STUDENT where ID in (
select ID from CHOOSE where CourseID = 'C2' and ID in (
select ID from CHOOSE where CourseID = 'C3'));
--输出结果为张三

除了这两种方法以外,能不能通过使用隐式内连接或者自连接的方法完成查询呢?

SELECT NAME from STUDENT WHERE ID =
(SELECT ID FROM CHOOSE B
WHERE CourseID IN('C2','C3')
GROUP BY ID HAVING count(1)=2)