in reply to comparing 2 lists

There are two things which you need to modify.

1.The problem may be because you are using the "= =" operator in your code to compare.
For string comparision you have to use "eq" like $W eq $Q.

As the SQL statements can have other words than the table names you should go for pattern matching of table name instead of checking for equality.
For Eg if SQL Stmt is as: Select * from abc
If suppose you are searching for table name "abc" and you use equality operator, the strings will never match, so go for the regex.

2. Also you are pushing the table name found into an array and writing the whole array again. So by this there will be repetition of table names
Instead of pushing into an array and writing that array to a file, just write the table name alone to the file as print USED $W;
So code can be:
foreach $W (@tableList){ foreach $Q (@fileList){ if($Q =~ /$W/i){ print TABLE "$W\n"; push(@tableUsed, $W); print USED $W; }#end of if else{ print USED "no tables exist in the file\n"; } } }#end of foreach loop