Here is my test script, there is no primary key as ID, test case is to join multiple rows having same key, and result in how many rows.
create table Test1(id integer, name varchar(100));
insert into Test1(id, name) values(1, "Vijay");
insert into Test1(id, name) values(1, "Sandy");
insert into Test1(id, name) values(1, "Rohit");
create table Test2(id integer, surname varchar(100));
insert into Test2(id, surname) values(1, "karma");
insert into Test2(id, surname) values(1, "sharma");
insert into Test2(id, surname) values(1, "yadav");
select Test1.id , Test1.name , Test2.surname from Test1
left outer join
Test2 on Test1.id = Test2.id;
1 Vijay karma
1 Sandy karma
1 Rohit karma
1 Vijay sharma
1 Sandy sharma
1 Rohit sharma
1 Vijay yadav
1 Sandy yadav
1 Rohit yadav
select Test1.id , Test1.name , Test2.surname from Test1
right outer join
Test2 on Test1.id = Test2.id;
1 Vijay karma
1 Vijay sharma
1 Vijay yadav
1 Sandy karma
1 Sandy sharma
1 Sandy yadav
1 Rohit karma
1 Rohit sharma
1 Rohit yadav
How this works internally? Does is keep one table static and streams another table on it, and how pointers works in such cases and where the metadata gets stored while join process.