Shouldn't it be Params.ParamByName instead FieldByName?
No, not for a TSQLQuery with a select statement.
Normally fpc can extract an insertsql but with a join that's not possible. But after sql.insert you should be able to set the fields of the insert statement.
Alternatively you can set the insert statement in the TSQLQuery.SQL itself and then you can use parambyname before you do .ExecSql.
The only issue i can think of is case sensitivity.
But that could depend on the db used.