---
title: "SQL vs NoSQL – ¿Cuál es la diferencia?"
slug: "sql-vs-nosql-what-is-the-difference"
published_at: "2022-10-05T08:04:47.000Z"
categories: "SQL Avanzado, Miscelánea, NoSQL, Tutoriales de NoSQL, Integraciones SQL"
tags: "Diferencias, MongoDB, Bases de datos no relacionales, NoSQL, Bases de datos relacionales, SQL, SQL Server, Tutorial"
---

# SQL vs NoSQL – ¿Cuál es la diferencia?

> SQL y NoSQL llevan un tiempo en el mercado, pero ¿cuáles son las diferencias reales entre ellos? ¿Por qué deberíamos usar uno u otro?

SQL y NoSQL llevan un tiempo en el mercado, pero ¿cuáles son las diferencias reales entre ellos? ¿Por qué deberíamos usar uno u otro? ¿Cuál es la conveniencia de usar uno u otro en tu proyecto?

¡Vamos a averiguarlo!

![](/blog/why-is-nosql-faster-than-sql/image-19-1024x542.png)

### Antes que nada, ¿qué significa NoSQL?

En realidad, NoSQL significa **Not Only SQL** (no solo SQL), lo que significa que **vas a usar SQL dentro de NoSQL**, no es como el meme que dice _‘Cuando te preguntan en una entrevista si sabés NoSQL y no sabés SQL’_. Respiremos hondo y, teniendo esto en cuenta, metámonos de lleno en cada uno de ellos.

## Las principales diferencias

### Bases de datos relacionales

**SQL usa bases de datos relacionales**, lo que significa que los datos se guardan y se acceden de forma relacional.

Por ejemplo, tomemos un ejemplo de la creación de una tabla en MySQL:

```sql
CREATE TABLE Customers (
    CustomerID int NOT NULL,
    CustomerName varchar(100) NOT NULL,
    CustomerSurname Varchar(100),
    PRIMARY KEY (CustomerID),
    FOREIGN KEY (PersonID) REFERENCES Persons(PersonID)
);
```

Lo que estamos diciendo acá es que va a haber dos claves a las que se puede acceder en esta tabla, una es el CustomerID, que se crea y depende del contenido de la tabla, y la otra es PersonID, que es una FOREIGN KEY, viene y depende de otra tabla.

Como podés imaginar, esto genera una relación entre las dos tablas, lo que va a significar que podés acceder a las dos al mismo tiempo y hacer reportes con los datos de ambas.

**NoSQL no usa bases de datos relacionales.**

#### Ventajas de usar bases de datos relacionales

Entonces, ¿cuáles son las ventajas de usar bases de datos relacionales? Acá tenés algunas:

-   **Integración:** esto significa que si una columna de tu tabla usa cierto tipo de dato, todos los datos de esa misma columna van a usar el mismo tipo de dato.
-   **Atomicidad:** esto significa que la transacción no puede ser parcial, o vas a tener tu consulta ejecutada exitosamente con todos los datos que estás pidiendo, o la consulta no se va a ejecutar en absoluto.
-   **Precisión:** las primary keys no se pueden repetir, esto significa que cuando estás consultando por cierta primary key, estás accediendo a todos los datos que se correlacionan con esa primary key, y no va a haber duplicados.
-   **Alta seguridad:** podés hacer una tabla a la que puedan acceder todos los usuarios, otra a la que puedan acceder ciertos usuarios, otra a la que solo puedas acceder vos… Creo que se entiende la idea.
-   **Documentación:** estas bases de datos llevan mucho tiempo en el mercado, así que la documentación está en todos lados y es fácil de conseguir.

#### Desventajas de usar bases de datos relacionales

Ahora, hablemos un poco de las desventajas:

-   **Costosas:** necesitamos software y personas para mantener la base de datos, así que el costo de hacerlo es casi siempre alto.
-   **Escalabilidad:** podemos tener big data en bases de datos relacionales con los servidores adecuados, pero en bases de datos NoSQL, podemos guardar más datos con menos recursos y problemas.
-   **Pérdida de información:** si tenemos que migrar nuestra base de datos podría haber problemas para acceder a la información y podríamos perder información en el proceso.

### Bases de datos no relacionales

Ahora veamos cómo es una consulta de creación de colección en **MongoDB** (que sería el equivalente de crear una tabla en MySQL)

```sql
db.createCollection("post")
```

Bueno, eso es todo, no tuvimos que poner una primary key, no tuvimos que poner columnas, podríamos haber pasado parámetros para delimitar el tamaño de la colección, pero en este caso no lo hicimos, y lo único que necesita MongoDB es el nombre de la colección… Es más, ¿qué pasa si te digo que NO necesitás una colección en absoluto?

Esto sería un insert en MongoDB:

```sql
db.post_2.insert([
	{
		title: "This is a new Document in the collection post_2 (That could be created by this same document)",
		description: "This is NoSQL",
		tags: ["this", "is", "an", "array"],
		GINT: 100
	}
```

Acabamos de crear una nueva colección solamente insertando un documento.

Como podés imaginar, los documentos no necesitan tener el mismo tamaño, no necesitan tener los mismos campos, no necesitan tener nada en común (pero sería una buena práctica que pongas cada documento en una colección que se correlacione con los mismos documentos), entonces ¿cómo hacemos un Select? Bueno, es algo así:

```sql
db.post_2.find({"title":/.*This is a new Document.*/)
```

La segunda parte de nuestra consulta sería un Regex que sería el equivalente en SQL a “LIKE ‘%This is a new Document.%'”.

Así que ahora tenés una idea de cómo funciona una base de datos no relacional, ahora veamos las ventajas y desventajas de usar este modelo.

#### Ventajas de usar bases de datos no relacionales

-   **Flexibilidad**: como vimos en nuestro ejemplo, podemos poner lo que queramos en un documento, y de todas formas quedaría escrito en nuestra base de datos.
-   **Escalabilidad:** las bases de datos no relacionales tienen mejor rendimiento que las relacionales en datasets muy grandes.
-   **Pueden correr en dispositivos con recursos limitados.**
-   **Pueden correr en múltiples dispositivos.**

Suena bien, ¿no? Pero también tiene su lado negativo.

#### Desventajas de usar bases de datos no relacionales

-   **La integridad de los datos:** como vimos, los datos no necesitan tener integridad, así que podríamos encontrarnos con algunos problemas acá.
-   **No tienen estandarización**.
-   **La mayoría de estas bases de datos no tienen una herramienta de gestión.**
-   **Compatibilidad**: la mayoría de estas bases de datos todavía no son compatibles con comandos SQL.
-   **Soporte multiplataforma**: la mayoría de estas bases de datos en realidad no funcionan en un entorno que no sea linux.
-   **Documentación pobre:** como no se usan tanto como las bases de datos SQL estándar, no tienen tanta documentación.

### ¿Cuál es cuál?

Ahora que sabemos de qué estamos hablando, veamos qué bases de datos usan SQL y cuáles usan NoSQL:

**Bases de datos SQL:**

-   Microsoft SQL Server
-   OracleDB
-   MySQL
-   PostgreSQL
-   SQLite
-   MariaDB
-   Teradata

**Bases de datos NoSQL:**

-   MongoDB
-   Cassandra
-   Redis
-   Neo4

### Conclusión

Ahora ya sabés cómo funcionan ambos tipos de bases de datos, y también sabés cuáles son las diferencias entre ellas. **Las bases de datos NoSQL son muy usadas por empresas muy grandes como Alphabet o Meta, que no pueden guardar la cantidad de datos que tienen de forma convencional**, así que necesitan este tipo de bases de datos para optimizar su implementación de datos.

Además, sabemos que las **bases de datos más usadas hoy en día son las bases de datos SQL**, ya que cumplen mejor con los requisitos de la mayoría de las empresas. Vimos algunos ejemplos de cómo se usa cada una, y por último, vimos cuál es cuál.

Acá tenés un [link](https://www.mongodb.com/docs/) útil para empezar con mongoDB si querés aprender más sobre él.

Y algo de documentación de Google sobre [bases de datos relacionales y no relacionales](https://cloud.google.com/blog/topics/developers-practitioners/your-google-cloud-database-options-explained).

Además, acá tenés algo de información sobre [Redis](/es/what-is-redis-and-when-you-should-use-it) (una base de datos NoSQL) para que empieces.

¡Espero que encuentres útil este artículo! Nos vemos en el próximo :).

