As I mentioned in the comment, to answer this, the full name of the motherboard is needed. I give an example. I have the Intel DZ68DB as seen here: http://ark.intel.com/products/55744/Intel-Desktop-Board-DZ68DB
The motherboard supports up to 32GB of RAM (Right now I am using 16GB). This in a small way depends also on the memory type but for this motherboard, the DDR3 I am using can go up to 32GB of RAM (8GB of RAM per slot).
When I run
sudo dmidecode -t memory I get the following:
cyrex@cyrex:~$ sudo dmidecode -t memory
# dmidecode 2.11
SMBIOS 2.6 present.
Handle 0x0027, DMI type 16, 15 bytes
Physical Memory Array
Location: System Board Or Motherboard
Use: System Memory
Error Correction Type: None
Maximum Capacity: 16 GB
Error Information Handle: No Error
Number Of Devices: 4
as you can see it says 16 GB but I actually know is not that. It is 32 GB. I should mention I already updated the BIOS to the latest version and tested for 2 whole days the system with 32 GB of RAM (Which also answered a doubt I had about performance and speed between a 16 GB and a 32 GB system.) so I know it works with 32 GB as well.
So as you can see,
dmidecode will be wrong in some hardware until an update to dmidecode or the way it parses the information gathered is corrected. This also includes tools like
lshw which will show the same information. This is not the case with every hardware but you just happened to have the same bug as me. I am guessing in a newer version of the program (2.11 as of now) they will correct this.
I will point you to the Linux Man Page about dmidecode: http://linux.die.net/man/8/dmidecode
There you will find in the Bug section this:
More often than not, information contained in the DMI tables is
inaccurate, incomplete or simply wrong.
So dmidecode helps but is not 100% accurate. Our case is an example.
Lastly the Bug reports for dmidecode - https://bugs.launchpad.net/ubuntu/+source/dmidecode/+bugs?field.status:list=NEW