In order to add data from an external database (either in csv format or dbf format) to a shape file I ussualy do it as follows. Keep in mind that both the vector layer and the external attribute table must have a field with the same type of information.
1) Open the vector layer
2) Open the csv file with layer/ add delimited text layer. In the dialog box I make sure to select that "no geometry (attribute only table) is selected. Once you hit ok, the external database must be shown in the table of contents.
3) I select the shape file right click and select properties
4)I go to the join section
5)I select the green plus sign
6)In the dialog box the join layer section must show the external database you opened prevoiuosly
7) You have to select the join and target fields
8)Once you hit Ok the join is performed, but to see the result of the join you have to open the attribute table of the shape file.
Remember that the join is temporal, so in order to make it permanent you have to select the layer in the TOC, right click, choose save as and give a new name.
Hope it helps