@Test
public void join() {
	List<Member> result = queryFactory
			.selectFrom(member)
			.join(member.team, team)
			.where(team.name.eq("teamA"))
			.fetch();

	assertThat(result.size()).isEqualTo(2);
	assertThat(result)
			.extracting("username")
			.containsExactly("member1", "member2");
}

연관 관계가 없는 세타조인도 가능하다.

/**
 * 회원의 이름이 팀 이름과 같은 회원 조회
 */
@Test
public void theta_join() {
	em.persist(new Member("teamA"));
	em.persist(new Member("teamB"));
	em.persist(new Member("teamC"));

	List<Member> result = queryFactory
			.select(member)
			.from(member, team)
			.where(member.username.eq(team.name))
			.fetch();

	assertThat(result.size()).isEqualTo(2);
	assertThat(result)
			.extracting("username")
			.containsExactly("teamA", "teamB");
}