In QGIS 2.18.9...
I have a shapefile with two attributes 'ID' and 'POP', each of which is of the integer type.
I have a CSV file loaded as a delimited, text-only table layer with two attributes 'ID' and 'EMP', each of which is of the integer type.
I use the standard QGIS algorithm 'Join attributes table' to join the table to the shapefile based on the common attribute 'ID'.
The join executes as desired, except that:
1) I can only get an output shapefile if I choose to create a temporary output layer instead of specifying a file name and location for it to save to
2) in this temporary output shapefile, the two attributes from the original shapefile are now of the text/string type instead of the integer type even though the two attributes from the joined table are still of the integer type