No, this approach is correct and normalised. In fact it is spookily similar to a little database I use myself to record set lists used by my band! Yes, it will grow to a few 1000 rows - probably never a million unless your artist is very busy! Even millions of rows is not "too many" in an RDBMS.
However, I would not add that redundant "id" column in tblSetlist. My version would be:
create table set_list( show_id references show, song_id references song,
constraint set_list_pk primary key (show_id, song_id) );
(That syntax may not be quite right for mySQL, I don't know mySQL).
I would never prefix my table names with "tbl" either, any more than I would name my children "boyPeter" and "girlMary" - but that is just a personal pet hate, and it seems half the world uses "tbl" prefixes these days, perhaps because they are
VB programmers rather than database designers.